namespace FSharpChess
module Ref =
    //random number holding position - used to check whether a position is same as one previously checked
    let HashCodesA =
        [|
            6557995217205458958UL;3216546429887213718UL;10981975557637945592UL;13117948053612451546UL;16462319544570117268UL;14109089931958414830UL;7784257433824872028UL;12575758863506724218UL;
            5452803369408346770UL;17504272207519905704UL;10076908662681196056UL;12181556996310766954UL;6618282532582206852UL;886584768689976646UL;5337735909196723884UL;1518236921046637970UL;
            15827119029725512510UL;9082962233660957234UL;1263297098503346738UL;13875222574635967674UL;16609127610647298318UL;10435515111652777838UL;18329661936892632940UL;5331746027401435792UL;
            1049717386564424156UL;9246948175640910896UL;17992694740464130014UL;11919617026173496926UL;942713142301085492UL;16767582443534198792UL;2343237112367443196UL;7706490310447073566UL;
            1180650458668525454UL;110739167744257384UL;15612783373802952686UL;12368533738239614404UL;4710529855387962032UL;1491317575964475796UL;7991609012807777138UL;13223305147380179598UL;
            9827852277825374356UL;8971731418860897980UL;5890489662268004190UL;621233762326742028UL;11437796629142146816UL;14858882528073565038UL;523346254803746784UL;14883403326801949494UL;
            10568557893264073862UL;7767832610067314526UL;1588172969737753022UL;7365253622489937858UL;3475562964612195378UL;15378553259884894290UL;10258544682946854394UL;16471709323283427872UL;
            7387401186393507380UL;4836657810614330796UL;15117989234145937886UL;5053120470808326610UL;3415221099905780174UL;1032168018064794264UL;13326555077905273864UL;5458304681770616980UL;

            3591490871264005846UL;11477029166294441118UL;17207443962968935894UL;455488295483641806UL;4330807740248377940UL;6552962174459494146UL;8378431705090728210UL;14164578135339702830UL;
            10465581913979867856UL;7923717876592009806UL;4111855899994986858UL;8853560567149517396UL;16585393081409031800UL;1554706319225285626UL;8114008830732912492UL;3371940990714217908UL;
            2521660644058944506UL;2948542054564828660UL;14153534865037268920UL;13194226332749162618UL;16671450371134523938UL;6771401495000981258UL;8408199538811145490UL;13624210701813922222UL;
            15107869283949129708UL;10537348939668604012UL;112940723069126890UL;15819144237224908626UL;2892066878009356948UL;6893057789012355990UL;14974156480460794972UL;2664014192529203210UL;
            5340980247011934632UL;17509454861226944078UL;11940453918049674332UL;18220748372254471362UL;16824233280937172050UL;610012363404793194UL;12515668202642270334UL;1659308426616672788UL;
            7079568573131857870UL;17463207697321781860UL;10673273525780713024UL;4208978758881610544UL;8283083076309309622UL;2755991034385475388UL;13199066122313278856UL;15647147990663949628UL;
            2032444034691397282UL;531489711211049572UL;3938448369147987384UL;13444972959689344786UL;6257518099028975776UL;2796815787615533756UL;13700228577489310564UL;3160185983542576612UL;
            2200040045247455020UL;15327288303752387800UL;10495710256153793502UL;16273505662658112490UL;14721398773463347032UL;5206466328696068152UL;11485607232664799858UL;10023668604770321902UL;

            16164111449390318276UL;11419626980698143882UL;3217985813656852606UL;11925939290598446094UL;16807230890854361004UL;8132383134553493882UL;16234001359038311548UL;2222980806129073348UL;
            12147126317193968708UL;12662676227780305028UL;7659016084700499920UL;15919405972837025858UL;5336156159565083352UL;8423454768724593766UL;2169585031632404044UL;14142541111985433560UL;
            2583011259453287228UL;11286844808399943576UL;8374353354055572742UL;6722194691202237510UL;3911546955319814036UL;14360802384881332098UL;6382525139320483186UL;11397912141720563588UL;
            14899448643725947014UL;10897806443353667966UL;14543834309523647952UL;1343268705450754474UL;12872137863462285308UL;14161292543141927346UL;12095639110668341110UL;2910582744648050790UL;
            5564895272546551192UL;13816528074761504572UL;4578164982259605850UL;12865709233171828210UL;14856112534707616532UL;17141448801886020236UL;6326927501705036350UL;13940937044014384492UL;
            11694505150302226348UL;7921763992326395500UL;7697700509538371894UL;4534448629453279352UL;2845043025763917274UL;12394706142921790328UL;9305303698502041320UL;6745192885713086760UL;
            12213175712255584760UL;6656715557600338032UL;11048561003910172554UL;11110761397977851390UL;12939332314972678396UL;15198141740616770612UL;11040779257252314990UL;17381604467550285786UL;
            4770697911055951336UL;8757222608347024348UL;1816873549623978120UL;5326478122178533130UL;1087289619159340200UL;11855682151452920014UL;7511779647440295244UL;18318385218204224596UL;

            3344936817192064422UL;17401255372786163664UL;3872772219482588148UL;6137944081860966718UL;3055734278902581824UL;6945616616493087180UL;18336212114342542160UL;11923731121064839160UL;
            4519098124918913706UL;12117983363740902858UL;7493560463396383966UL;7147016527897967860UL;5792910241466836596UL;9724127137522948202UL;6243118658839786780UL;13885013441783436160UL;
            4778609824380132206UL;7011974445843263536UL;6359370794641180748UL;1665806381701613704UL;7205507689655680604UL;1227265249673702986UL;3466313199543695154UL;4223256977058918776UL;
            15647860166391471038UL;17143997206320015422UL;18151665473222025196UL;1209194083007403446UL;8501083085299244810UL;7713214028065421518UL;15584711205387884816UL;8607440584317730526UL;
            16877935960819523498UL;152479391901382770UL;6682814327425431328UL;3214828881490714820UL;16937312275420067744UL;13348490641085181504UL;17803472016395178612UL;6008548173903631042UL;
            2306524264243502384UL;3917445192178345188UL;13323860474076086898UL;1509493364220519758UL;297939423860401882UL;11773351517274655728UL;6394920637879756110UL;745618706588083402UL;
            12425172210749952908UL;1799385813435961628UL;1183216649081491400UL;9846358368954191780UL;9547455301444961018UL;8672793385275941226UL;7290761809530633956UL;765697254636148538UL;
            16744140777532759624UL;7512057434271677736UL;10329939830924301418UL;6915763866881108846UL;15537502923271363082UL;13842827890401801300UL;13275445886735766078UL;12396036464926460714UL;

            1388206476602946332UL;12604574175452993446UL;8789111346873611468UL;12509962012664031358UL;2850409377252911622UL;7947066416550965116UL;3894409182713062620UL;9108449337907075364UL;
            10864638592470718524UL;162719520516691236UL;16957343228882379696UL;14333748128682875422UL;8622737960702205888UL;4196169684417923184UL;16760440721733045048UL;16644990216076477868UL;
            2484296943318739496UL;15758064161420148116UL;1823742412779931420UL;13371718722184545162UL;17674727640378858442UL;18263782288417572360UL;15318000466827519830UL;11032596358787439946UL;
            245840885151265736UL;11728243866590838336UL;6918118154900648708UL;688765597643637744UL;2377264675294192380UL;13455269893442642120UL;17850438961445686804UL;1647207715815469688UL;
            13733325228269359148UL;2419332685934222516UL;1207884240307078588UL;14922888442592148292UL;3458463330032783658UL;7311935566668900388UL;8970422960993277058UL;8658599938099139622UL;
            3054230502498618394UL;12397960654450837472UL;4872978039965947488UL;12319733408774079494UL;4488893741487824520UL;5864077424484462482UL;14708166006776717536UL;13481247054196810926UL;
            13065572577010239946UL;3717179871896849274UL;9470609289005981402UL;7243170530067618406UL;7702391841130663460UL;16899418129538396328UL;8648599374172182154UL;15345423296027576404UL;
            16017417564740220342UL;14240555326155257928UL;3224164359748396308UL;14599131993280338370UL;14173933314009159734UL;9255057131345148678UL;15254209989920391856UL;13513619034292722414UL;

            11960803740756832924UL;14990660218859227290UL;16288381560637520820UL;2824879557307266218UL;15183388117525220182UL;1503590481965655042UL;2209006097086652012UL;4446252414168005800UL;
            16627819364469247264UL;2823247940770448108UL;1489334515496216442UL;3344555996350009396UL;15393380973037338750UL;6660139428992074438UL;18069099554953020570UL;17021260773280033596UL;
            16424468978589491124UL;12155690854037219092UL;647912243374668548UL;5517684647854983110UL;2088246732055896240UL;9056460280224703648UL;17763397553263983140UL;4830537618690397268UL;
            17980888931579611550UL;11134577441628307144UL;15031757321199757096UL;5567343718582756226UL;15424318866853701712UL;4893622921252694744UL;4442863504296324750UL;17946061138965074786UL;
            4907239486881513522UL;12056193894740891242UL;11225481049109788580UL;13899030677294564950UL;5433617801164976038UL;11525293649402579286UL;17497955483299454350UL;14692811270157588404UL;
            9705089884582494798UL;7259847420451718516UL;8221357299467336550UL;6548382687886189258UL;11634337934724001780UL;16428270785335272646UL;17328373334178607072UL;4833306833697490194UL;
            15237347939434069096UL;11624782695541192564UL;17753791507520697468UL;9378923982208539298UL;16766949790996661768UL;11984010350781213032UL;4661576775331958580UL;5912477841887156832UL;
            1618399316511475318UL;4797824379757225494UL;9769827708287636890UL;9978286463820157612UL;17654605667685993402UL;2220029364424753414UL;7712628500036896260UL;601977354988185498UL;

            16198045497286566170UL;15066518817651085512UL;11674572506859055770UL;7782756029441895324UL;18101358491627647688UL;6817607294387684190UL;12900583637825338708UL;11782521172850240680UL;
            10876591988429144744UL;8118705223050341604UL;8847485636800003558UL;17626202140096324018UL;1265330542575019934UL;7791948755286187134UL;5904245549665420388UL;15983459163060770168UL;
            10599896774180588702UL;5028303617488669722UL;823371139033120566UL;18163081935239432698UL;10894853658992277032UL;265569971633279628UL;13360476310507423768UL;16674172752312285190UL;
            6204552001601576094UL;12665639170158307730UL;9677053844687245296UL;715172232508078580UL;11305249860831420962UL;14486990784187916142UL;7424916963188750484UL;12958719887580342884UL;
            18133637841071954684UL;169869480430118332UL;15943973537935101956UL;16352724000820828736UL;13244631872682564440UL;2352712817505352924UL;1896037200654681584UL;12715735085130484460UL;
            6487554510384000746UL;881525408458183072UL;7210548449120267868UL;1398477378895203516UL;10356496154026974762UL;4396440639342169366UL;6425232113267501650UL;7522081727259491122UL;
            3053463061419457926UL;16212486860888469692UL;15701156741900881596UL;6154506516404304248UL;8407827639560824862UL;3965224356486437650UL;8364280396468769218UL;4493014910987650996UL;
            14833773787325157452UL;8208885737841763058UL;12547545232467850670UL;17067552817000416036UL;11810455630983138800UL;15766617408063377366UL;8370205410411106274UL;3160859810804582384UL;

            10462599958619452926UL;9590774916705603800UL;4715682666706228304UL;17353170092904189052UL;13218976393853551352UL;18426199526952577922UL;2537916211726828882UL;4059388623729016168UL;
            7016989038808194238UL;3550629857938950998UL;9406326415411671662UL;8817703211919315350UL;9421681572500188900UL;1513687319508271546UL;3281414890847066886UL;10878665241293195498UL;
            17906835325985481218UL;9804850597546979672UL;10198234208526790454UL;6286900586539669172UL;6300209080211638992UL;12772396456848845582UL;10147596510906151826UL;15270665258762884380UL;
            3885985236056332098UL;3821655003481266838UL;906111883223352318UL;9575304355208091150UL;7853117846141967704UL;10436402738964682492UL;2399677004377746004UL;2330187564018793040UL;
            5092216094589542912UL;8990305876690967686UL;17454800020768591530UL;6601523162001835412UL;9162744767253837856UL;15363365894524788038UL;11692135621170375500UL;8963449335441989268UL;
            12735775156117007562UL;2481312222658142886UL;8445034828652654222UL;5251043379906178128UL;4821441965881279262UL;10311436906228803156UL;17778827883096942996UL;17686970880736581900UL;
            8336382523324132006UL;16255104434813394774UL;3913556288757961778UL;171521669097497030UL;584704248724122980UL;4714428131092498046UL;2229850204507612068UL;14650188408228485402UL;
            8021228613930264046UL;2449431685254533530UL;5261855366043898568UL;3780490088037841778UL;1646179932179754454UL;7601402561819458914UL;16918816041532370436UL;3014964941227474472UL;

            18223988674063759430UL;3065727362606402448UL;2852017506776277202UL;6923241868541995068UL;2297334295715853306UL;17809212399164824898UL;2922280118173986138UL;17378007342082060362UL;
            3320755042184102914UL;724836288104314222UL;11077774764964415062UL;4016344871879019602UL;1117147010581946026UL;11840300856067310662UL;6135046714864846188UL;1427419194335940272UL;
            1683767117336272824UL;11318966227185947890UL;346325405127319148UL;13590720889076300244UL;5258571877593294612UL;3023081284428176814UL;9633995897634344226UL;8563785085560427834UL;
            10639846026616021106UL;16913467334468387362UL;9625362733124106984UL;4921556863397514232UL;8806455934410818158UL;15603235995724695602UL;14529333511805631792UL;11992149592614640978UL;
            1118114318139987572UL;15881120350659289468UL;9932369911372744808UL;1263107432744127310UL;10495115382784571424UL;10394179632060235688UL;1072078954232623542UL;8001379085089345252UL;
            14571153690363450594UL;18080009409451474376UL;10859609056686907842UL;16694974174616433532UL;15943045085229456642UL;6657752632003558522UL;14187144686631535720UL;12825088730625920334UL;
            9423838313605508164UL;5851573980567836476UL;17437735250958123006UL;1612822398473347816UL;13979849410623282742UL;14083899494126822390UL;8076136678948908538UL;8316372784867549388UL;
            10455716791673477574UL;3682794777767255526UL;10958801983034516756UL;12729551741726962170UL;13129688738319188944UL;15962029641640367996UL;14258323761856670180UL;5509092894363686516UL;

            10068053600909066890UL;13799171697315485676UL;9739365072488327254UL;11874697635848993798UL;7801735642456237648UL;18241918703131716080UL;10248505701661230624UL;7447117981548911460UL;
            12651890771728175436UL;16601918969050281610UL;17082820184183526068UL;14650797215031060090UL;12478629344555555540UL;13129641151611251812UL;11252148081318951742UL;173269718981918134UL;
            11482475308543774572UL;17888456028049406822UL;1619799392005881976UL;15502974029270414676UL;17056811981845864078UL;17237161170146515540UL;9521787808840460864UL;3164765276127555282UL;
            883590126892036114UL;8069981280346567918UL;9017313689349954384UL;2522394388160319414UL;1671648926279625174UL;7195721485905770262UL;14536203656731610288UL;10514755715993673278UL;
            1941273072697034344UL;18025671786291583082UL;6783223017470087266UL;1355951601139888354UL;982393362466389638UL;4943555246134846860UL;16839243796718438870UL;16227265772712192788UL;
            744326921405722688UL;980444972375847262UL;5928409892568210270UL;14868318205222754874UL;15387288710406050694UL;9590804986818398322UL;15868571213089823552UL;14387935302503020102UL;
            6372687002074867584UL;1108351406833023006UL;11154440976426839074UL;2069720140691574998UL;17466306166046395422UL;17501951172993198334UL;18297197273766008716UL;9214628855025347984UL;
            11809026131879737050UL;2432819917653656884UL;4138046899647222852UL;17404266352926865602UL;961386131944984904UL;13188951156669255926UL;2119544031616778080UL;11433384966034940488UL;

            8322112754799500742UL;7225642572412515128UL;16434870717972331498UL;18129098069361896392UL;7535505947618204358UL;7008835965154161184UL;18149635609825984112UL;14629226367319797530UL;
            5413888737599345958UL;6539045591447072830UL;14658852713812994918UL;3675839463133400426UL;13040374761001590512UL;3942369572321758478UL;16720389394336408220UL;6988555750320782744UL;
            12117245228928768876UL;10381468422342671066UL;9604107129766883004UL;11743111119337055194UL;14597581450423504332UL;14483278801542348128UL;1283210232357942928UL;1859944239777366358UL;
            16672359311042229516UL;219242288836095086UL;11408373454018974092UL;2271906838757922212UL;17700030838712093036UL;15237144689927921496UL;17133762144956998970UL;5831743846966709716UL;
            743087363054682110UL;18419051819058372604UL;4356795774558063724UL;14700385272851312916UL;12039882048416392630UL;16196474819539037612UL;11258733781964864974UL;4832651594839572504UL;
            3778552368018812756UL;978098358104925228UL;546171797364455180UL;7703637302521788278UL;14067005739089945594UL;555784113415420132UL;2491530014219976474UL;6323263865325055206UL;
            17110382321811261534UL;5360536045565975116UL;5008044277141369982UL;14864038932044773816UL;8796738194901524976UL;4179121256977483030UL;15457554482660151430UL;18152534996168928702UL;
            13839173849530016616UL;2393950385219159252UL;6214331500205344866UL;2072128787709894824UL;17098862191251694284UL;11646715965269190174UL;13452066485371323398UL;9451166966822417524UL;

            10495042241935330410UL;2601606175441845348UL;10367993686308191224UL;10164838763319879460UL;1521772675380525588UL;4398341780718700120UL;1438329793137006484UL;18335358809734198016UL;
            9093200633068932274UL;17193590326275932878UL;5314402126269244472UL;17868314474924842950UL;12318254144001124286UL;10341321453020809156UL;16739921964800787266UL;16729828975924719674UL;
            962448725944479930UL;18164082327507296586UL;11791875157165937846UL;9927655835267422072UL;3958585910643133700UL;10139761499630696038UL;2612874156317429702UL;7515781022277638516UL;
            17990136961915045006UL;2399669595651317836UL;4949006358503682642UL;17261961305020330214UL;17617114463836888820UL;5992112515661624496UL;13661938035773928480UL;7969512928110374624UL;
            13748307318991879006UL;16671203560323775860UL;3366045570271433048UL;5178313569890927228UL;9906544038235355194UL;17236418288356601574UL;4363823105989992508UL;13452548650393591772UL;
            15853925466626380190UL;14335641328221141672UL;11035692330437480184UL;16553064582327885182UL;7327486438620608978UL;8751297039553502920UL;11776442246661461690UL;16341912906657879792UL;
            3821937136091376064UL;2065517003299732356UL;5973897556780577726UL;2599997796122445954UL;11483806333275390578UL;11386227819947500748UL;1148978756265490312UL;15372530556150395002UL;
            7701127672722700530UL;2456437275545042398UL;1788841129749838418UL;9034852914631467322UL;7205281975570448970UL;6927577836091814226UL;11319370591320447482UL;13834196677911322920UL;

            17388653037478843658UL;11557135153390448590UL;9859206372499629422UL;16624487750664043566UL;7106630031987165560UL;3910154057094059388UL;12894141377048351622UL;13540976065827261862UL;
            3573688034213356290UL;1527128316864602874UL;17110669282237584016UL;18056164662192764348UL;17141877818507296388UL;4965628949440231340UL;18298353002015094966UL;16887546230194214712UL;
            2840567267229847794UL;2971880294845069118UL;7040298230129772354UL;7684328556499053144UL;11932924059990722686UL;10523335865074583706UL;14760279723054836054UL;156347100199929722UL;
            8241080479915107916UL;9236586761717703078UL;9286931486468124070UL;14280678413949263798UL;4287105055708683248UL;8061420135730580830UL;6406353852029708568UL;17687614917818022532UL;
            837857564621685516UL;15807538121242558212UL;5467677016347662774UL;6510642643446067836UL;17953722952944028036UL;3477592319808755624UL;18375871809213248470UL;16721777939452724410UL;
            316235633896686928UL;3786798668263310446UL;15384207778861953472UL;1908507186407541218UL;16940806511038869794UL;18419719690588134352UL;5456794551001800152UL;14317086327631429430UL;
            8902548288816792476UL;7535294223235741036UL;16023588832029554088UL;187635573527500196UL;15022709884042392764UL;9514239531872336028UL;2986415377146285540UL;12339248604114694174UL;
            10102939798094035212UL;17200596260016495288UL;6346111505475475434UL;1042966345465018442UL;9085504805684424870UL;17753811533601666020UL;4771683997878629738UL;16820290063667914472UL;

            17545613622841681746UL;10501891328749148278UL;9426908387088153308UL;8877089434143743062UL;13459885476225016672UL;9185958386474511294UL;5120516392545654832UL;14165698063145622968UL;
            6847708915845601312UL;7355483455673498960UL;16494535249479569034UL;11705033033488649218UL;18251350343559018236UL;15065819270541461548UL;11376452399259816238UL;8593254708121809928UL;
            3766479623975822972UL;14086321667423203714UL;8622476836776146302UL;12842960888468376816UL;4068737430762310318UL;14133956764673292544UL;9083206044346845834UL;4011875571403032608UL;
            15625060894836009252UL;1889265324647982124UL;3665329999209076784UL;6312111210106831900UL;5532502273248938888UL;13425407484649116734UL;17896713095005619428UL;4834726832543450412UL;
            5561303255605950664UL;7127197816163928908UL;2595006774291545308UL;12652930689033263362UL;3940050985010175540UL;13567225257720373740UL;10711626861993623774UL;147177847809271834UL;
            17477047963492222950UL;8136956387404159526UL;3117970724319799752UL;12147741636872885940UL;2242179716208357412UL;2562319680788492322UL;11061192320938775572UL;7908171076188569374UL;
            10498288624450659978UL;12563302206478880838UL;5730579894377095228UL;16308430302931869696UL;1831469209542535446UL;17992566768689471744UL;6394314967729364118UL;9945922527443908708UL;
            2383769403964594706UL;7243572543467171602UL;9673519885520955480UL;10302479083779678424UL;1222978968320988764UL;14116760955714134862UL;2778999516988478224UL;272137612191235292UL;

            18362019642220520632UL;17755149605427691238UL;8160413835264563194UL;7132858826473086762UL;1007724277759928980UL;15743651996523805876UL;16025805139638878002UL;5161082153409826282UL;
            4100462926474833894UL;18208079740419987330UL;12846472991818489784UL;12978259235470649460UL;103456753621245066UL;4651193507658424492UL;11390664131773545164UL;1691469575270734918UL;
            9801623276000129460UL;15400126094246462240UL;6962005964312803656UL;2710151849400758610UL;7163633941123730330UL;1436113090146831650UL;1214131491520122768UL;8288602715461326300UL;
            7209397833038329266UL;783510774798573244UL;17515929933458189902UL;17163480899148848852UL;379162074805962044UL;10359452548550129722UL;4904889499145281694UL;1730782921886347280UL;
            7733798654773319900UL;12083689413807324462UL;9733741507736632334UL;8563518115659578648UL;8234679590580718066UL;12635745401699872526UL;3515796062346602382UL;10313807708542751484UL;
            9590243228481784796UL;18312820394031351710UL;2268411402138529460UL;4541508915905349356UL;6640998182349241626UL;17062855046952176728UL;10862370304893891180UL;7344870253133488396UL;
            9839681346578731526UL;16129457661828346648UL;1010661346002988452UL;8927068749858475488UL;8947055826136189964UL;8222255366307327972UL;5068238261620947038UL;16561976205883417194UL;
            13876150851661739334UL;883937720935685786UL;2629899801469577772UL;12749005373783752508UL;7133681984040306688UL;10631558025487873470UL;2153981768149090976UL;13580534170312191286UL;

            8435020523903278100UL;3899549808124225056UL;11740181989979615358UL;2041080558069095060UL;15499985976758967078UL;16351352178717716834UL;3155488787503514122UL;8918355425615710116UL;
            1716338329987971662UL;8634976736576939216UL;1360184205345850660UL;80685516177902610UL;435671442675900540UL;9096124201126564186UL;15527634424542698474UL;1804657981933081670UL;
            1458585183149351304UL;15930460019289889874UL;9122907559677149454UL;1384733279166374968UL;3287866371596040874UL;11433439859207289334UL;16099084153461366154UL;8353404166395274294UL;
            7594431612145172426UL;5678654864300847890UL;2296316498868683128UL;16117104527415964124UL;14987129460127342310UL;18303810239017957078UL;18036186145600152580UL;7580821818782221008UL;
            8988132497386417792UL;15400483954176547520UL;5004883764012434498UL;5703741608894025110UL;5062492724851822130UL;5749127852241007686UL;14609076854938214498UL;6028471000313416526UL;
            5426572427479225114UL;12831947132453655008UL;2914874623825477326UL;1547932765128748618UL;10330657800124228258UL;1245833917906384314UL;9151243598656517166UL;13970250372540654636UL;
            15690282517834573640UL;5604322317368605636UL;16679931897902273436UL;1796595831797282574UL;8332875789471016014UL;3728652341858720794UL;7020228664937759766UL;9750376307427285518UL;
            1942847270524820678UL;8134801327608615504UL;4080113772526894578UL;2491070703886044058UL;13360655509619370760UL;4179639504456877008UL;2626178361387543956UL;6727224916781954734UL;

            697049003402709900UL;7321409807090816720UL;17901567487103664554UL;8507828525102310766UL;10433420987590654640UL;12016764149121530488UL;17308671610707428838UL;14009049094914124466UL;
            15287793111852817750UL;8398193963619866050UL;5008982554089882718UL;6625760951806960864UL;2995411598035499012UL;17342320092550096848UL;3741401159892176084UL;1407742525582738534UL;
            10643985204325275962UL;12492660627384936138UL;15023543365913601418UL;11241491059163425242UL;12412310737539243594UL;7022196888866678986UL;8902307296966089434UL;10965251883966128392UL;
            14244819358008232412UL;3496444803019880812UL;6547680326320028812UL;9996928622696526138UL;17550526766438310738UL;15074498431219699226UL;7550803613155793554UL;16649414371022742478UL;
            1986542532258149386UL;1778303755541528356UL;18115431151558693510UL;5384847065516003948UL;1859360829755063438UL;2335426881333950402UL;10041687238838600326UL;10333940178308817956UL;
            10457617226699114194UL;1519501693245038512UL;8294925956231854240UL;4420657647900632912UL;2947897131352196172UL;14062527908476704318UL;4059262799481613732UL;333160343173988928UL;
            11546802147115496736UL;7396825621132614272UL;15518522782322793380UL;6721404768863368010UL;11903292086227233898UL;6658021771352009420UL;14640054058612891042UL;11140487344450186652UL;
            7114792558576697934UL;3387505862897350554UL;15640531184607830958UL;16616720283676109202UL;9936727893764837680UL;17947404418416194658UL;13209421771296978272UL;8112652134469098058UL;

            5665404442519041296UL;11652329987666154062UL;13854588595341168890UL;6514112100154166760UL;3626875270923978286UL;16038900008469934550UL;2400067158618991236UL;13603071526515112366UL;
            1020499343493341262UL;3415488412138256228UL;4669837224676070028UL;7705332113226008316UL;852346498047127774UL;9285589157583961426UL;4120166983739494728UL;12698067291240684258UL;
            18229560719552215186UL;2069589819650391054UL;8147135925684561782UL;7447996661810213310UL;1815094731655449896UL;11295999133625140404UL;1208441532669388528UL;2831842216804409250UL;
            3373645269785229750UL;8572181569484468984UL;6168268300526695776UL;10392300361129127386UL;15135424525234907672UL;7686261396165508762UL;17132353351720071916UL;13284530247892685780UL;
            12247994756660140162UL;1166050697516006116UL;8821632965105408036UL;1842802062817658228UL;18075120208551426582UL;2723586755659008986UL;17863756796063009144UL;8053261149661880062UL;
            13253794882948269498UL;9988608050061241120UL;8742296581241379190UL;12303890603744907326UL;12204503846089050952UL;14459801701612119276UL;16597093992593754204UL;97473686188079102UL;
            6442228234539520012UL;12979411897087179894UL;14163305775019345300UL;15275631168831220392UL;10717209386685992858UL;9704491539566463286UL;3541499240924978424UL;2441609699312500632UL;
            7992470224703833816UL;3213469385909055804UL;12088361536403549074UL;8993005965618334956UL;10466394278834302270UL;1659100440994349686UL;735439209011868520UL;1302011778386667484UL;

            17377572500295275834UL;6003140462065580108UL;15064357806456510530UL;8938545766682692900UL;12044960507722261700UL;6672931493094911108UL;4205932370964761232UL;3273263430766591282UL;
            12954893346695653204UL;4456581349884521276UL;11964959556245653746UL;14611741444683672234UL;4319815233314161340UL;6338505257809472084UL;7079562779122952088UL;1425555313942491660UL;
            11732457201854548098UL;16659192675455660258UL;4625163344326626948UL;14365425020564515972UL;7923396323588240282UL;14003714631671619558UL;3973931139203065886UL;1226939725772574054UL;
            16573576071605566610UL;15966251362696382904UL;18210862833159108758UL;1671653095605261336UL;8871523210020380196UL;7665034417058761088UL;7873349992079541068UL;8069141792002954272UL;
            16644371083298261274UL;4153219780130355226UL;13159501946245857746UL;4234841917868207438UL;16456988767024439132UL;769721632228695900UL;17029164728979186056UL;9587239647395780446UL;
            5696695586663974828UL;5973573164245466284UL;2063961051660522344UL;15839727411994695414UL;199459669052927986UL;14946005510656560718UL;5533074920594268180UL;6116357638203448478UL;
            15159826749400631356UL;13744751880460335086UL;9026630115817166006UL;7852659349782449736UL;15748347900373409472UL;10303683974714885240UL;4934670569553498714UL;5376778982387108370UL;
            12015722847322421430UL;9842844136790033124UL;3894681422355049106UL;18250672835590363806UL;5806929370079168862UL;15352553644500412078UL;14654587642685911044UL;18042649453071963336UL;

            17946573602882554118UL;13962910691463550668UL;16603681017769630714UL;14141697429650567752UL;13670751367401967586UL;1916656545840761708UL;3927664540621357484UL;14293693855662677964UL;
            4714727513351594798UL;2451581932705223666UL;4381502341697200100UL;4368425723358635250UL;16984091860706930006UL;10506107317147062878UL;11955018622346451922UL;8382705398529510864UL;
            5267469662070717464UL;15301853718377696130UL;5222468855080464434UL;1358335983519133394UL;7051305686615951504UL;17616396652300564706UL;8134866340243791392UL;5814958151369686802UL;
            457785384807912768UL;8217216080001079036UL;5810600813959238594UL;15991251238118112550UL;5978035660977549408UL;13177562916699893330UL;2868137598350523944UL;8991218831506932804UL;
            5302773656371663436UL;99095853610299912UL;1788587076509008122UL;15112254392804371782UL;15295242803414544518UL;1684514525904896578UL;2470812776919717972UL;7393397109069194014UL;
            9286670733503693516UL;12864308131921283858UL;299574971472822716UL;7704229009114953650UL;14034285214502605382UL;15746713050279214390UL;15027030930736934586UL;15949364634273287416UL;
            16822520072905265460UL;14848813016659555092UL;14537935247989249588UL;5373799921628301034UL;15152638234304405174UL;10734514395627169250UL;13893775247432360360UL;12593229840062092124UL;
            17588233516394403022UL;451967259535062642UL;17787201662645497054UL;6494717919564680886UL;12284744786550852738UL;14556766516337798076UL;4508316373383323934UL;3696268089422111322UL;

            376856387213271802UL;15606748958390861436UL;5732467499142395644UL;9581842342894809158UL;536378430474277914UL;15225357924859506034UL;8069032853482777760UL;7384081406293592336UL;
            15225166930785196042UL;1814803006099418416UL;10923943020757249104UL;16016724822513309850UL;11851598054492819932UL;6694173686584917496UL;16294039626277543736UL;12523690005290728416UL;
            13754410116007817116UL;6587525011057060358UL;424818951823364514UL;3516274216476325514UL;16299747102147407044UL;386260018674172502UL;1181399325845063318UL;8175942810166613660UL;
            6444717557543992850UL;7257905226454997080UL;14737807439390237316UL;7836126903521609200UL;2869614908772334080UL;8748198205844139340UL;11145048314964365048UL;14715331818239684454UL;
            2175690806553480386UL;13011197415931344278UL;9751698169708401138UL;5743097684795304526UL;14407433447032538862UL;14113563889617871046UL;15735361926695798198UL;5962319320571728278UL;
            11337071994687828362UL;11418784404017101314UL;2203391709908825184UL;1843267239672419600UL;7076406494178840658UL;11416911575529081870UL;1937903514921520280UL;10021566705031748660UL;
            1293281435200205942UL;8739888437745858676UL;7678080003840364226UL;385807219277634006UL;1568351457825203838UL;6816571066377938896UL;4635963329449693942UL;5210167904902542444UL;
            7618592618489250390UL;1459725527312655116UL;7673205590265214388UL;9454976843229183074UL;4889830829399948388UL;12496991763280251212UL;2535557256724202966UL;11994251123662957068UL;

            9047374726642685298UL;9236970123329802762UL;16538397916652949686UL;9412423927210351996UL;17597353957404741724UL;16819058554428634608UL;1182306188088432788UL;16679378206943874156UL;
            11048997177922059402UL;14461917155561994690UL;8821188066289112540UL;2569542586880334858UL;13736757234172381344UL;13044945776504547232UL;7608552545217389344UL;16924925724737344722UL;
            13490273190041058056UL;13544483681849785854UL;13268030184260732328UL;8341577007587616552UL;11981385645784138840UL;12739813663858401146UL;15682750692183998074UL;13741999556868179034UL;
            7863061824753666954UL;10711848567370886900UL;1851928939872651412UL;173994800101321724UL;4955687640643085748UL;9096840850576520668UL;17009761012092243288UL;7108951253016709586UL;
            15432573436140201210UL;9061544758606553434UL;3304444937613904472UL;16685609420141789022UL;7277436274459389088UL;4182216630949380800UL;4900295465920426874UL;7443051037428928618UL;
            11273828603417989344UL;2352469712881399772UL;11673986160580734754UL;15690864393370035402UL;5478627578491943926UL;10897796410971510558UL;4704034473513099804UL;13234864866507084236UL;
            6134186279371533766UL;5206306754534358172UL;13007546367055059150UL;13167085736304116432UL;12275204124803464024UL;4716013566410744270UL;16677567026592534722UL;4171098949464447236UL;
            10802836935503779922UL;701866167495747064UL;3054889532304523998UL;17059421217919118712UL;10468886650443821178UL;13075717577531753708UL;16171956469496148926UL;7507204263148125046UL;

            535070851464515888UL;11011262178080311678UL;1056853323583859822UL;14513411946322362968UL;13722327066591950122UL;12712625604069112286UL;13223507269536054182UL;11844153752562103110UL;
            12390709658593153482UL;12204554713087954972UL;14349454703919723704UL;1612715212521958476UL;15757901246024590964UL;1716193147451670270UL;909852175890335094UL;15370917412142066098UL;
            1728933757882648298UL;8448628683348615796UL;12123255935135256628UL;16244465656445562864UL;795316636322912160UL;12063200268377639260UL;14915652542647832660UL;2915580400020274394UL;
            7078087096128525856UL;2747084540107334592UL;5924041513155809726UL;5740860192226924074UL;8493161838905553140UL;164118427865744620UL;639663497152624722UL;2451739645492093062UL;
            6870121342546334152UL;1986759699792393934UL;1697231316389591104UL;12839372130162943498UL;18051518219809926910UL;16863229931647879576UL;1870051230272811146UL;8378939526766460510UL;
            2576794903071643014UL;13072327487576715388UL;1526197592724647010UL;12015074863258546570UL;9107061268466920626UL;10772499169423062352UL;884252003474075916UL;3622759036444231710UL;
            7164634288339533838UL;9997171336275716664UL;14151337748627442430UL;11389069039320883556UL;4661903214707930728UL;3105956753327505464UL;6239063152221592958UL;5893564249273485776UL;
            5342486987090431266UL;5836543708096937226UL;1647527533801903614UL;2004799178205711340UL;17029458641467441136UL;1487219028898936132UL;17367531743422558152UL;14720464409431075348UL;

            1558077578039975344UL;13860830786044768784UL;10517244390486947730UL;17022065221998100252UL;10250628846810531174UL;787267214724421270UL;17282423542939038802UL;10923040188982833060UL;
            6711754163701036710UL;17968693316859942366UL;1952328545224446088UL;9261204598374683750UL;14304420986401391762UL;15420740490330437076UL;2448570425163893370UL;12683640306206648310UL;
            8330502810449932548UL;15814648749565247974UL;15915118991247025636UL;8122364383198329608UL;8330159730996266756UL;12363411138832883944UL;10413633595182886438UL;11179696256598581212UL;
            2237592972439708648UL;2255194386978233350UL;10839893033571845902UL;15890845364239956164UL;13408204945565476890UL;5753825721379036740UL;1939266150952902496UL;1479244964221623522UL;
            1346208858283752512UL;13679470843319856972UL;16440996502217024322UL;17156633379667530144UL;1191044343461553508UL;4449344272173312734UL;7582264404284676646UL;6261346191105489334UL;
            12196682178559230614UL;11901276765965488964UL;3291256350584031330UL;18012161963281745454UL;3778325114347582702UL;15703696660180311860UL;8529402902751379866UL;2160345441878788930UL;
            16442464919516802648UL;1825045828428699142UL;12469796883569673068UL;6221478891926613422UL;10268052443762121100UL;13217119802337340486UL;430524667900128926UL;10339101214570329592UL;
            17685628888905325398UL;2392228307787908902UL;3140581098169617940UL;4497969095045074068UL;6075935446294553584UL;3039220642247904180UL;7657406463893249544UL;15139342789550444248UL;

            865355807191259468UL;6279126667529299844UL;14383540414544334254UL;7864355081158328224UL;5328117748130550338UL;496808088723362266UL;9965408507556679224UL;3124745750444298358UL;
            7115899893391684798UL;5171369147873141418UL;4561894164142196798UL;5880574106513400518UL;8807526931934582038UL;18304895138076465394UL;14058555647262135616UL;10477443914198132626UL;
            11525605516087800140UL;15199201062077445936UL;3322608585540383280UL;1458066964785818986UL;6449518574670049000UL;12042490317506771720UL;9172651599754246990UL;12691276999830592106UL;
            13913342625004988374UL;10123952130947414598UL;7737824311586850344UL;1659215962546204404UL;15774776097797397116UL;13800303307694108790UL;1525288276994492676UL;15432307423560251896UL;
            12133271932643440672UL;13602399628926601836UL;13915390647036876360UL;12752208412494523924UL;14138578297288574142UL;10230582548493278560UL;16208109186136934426UL;11242965770532956578UL;
            17108761941570390008UL;10799878794521875348UL;8343579280620732208UL;17495903773051558162UL;15341670246306105332UL;15237163227516792352UL;13504056511348737166UL;574519821556648610UL;
            16250339875029676684UL;3193012847170915432UL;6061519854697965292UL;11628816252577707618UL;14987796622672231894UL;6457556980216639346UL;14586331542457865906UL;6115976552797342500UL;
            7654378081606602008UL;5359484951795705046UL;3195545882598988754UL;9231510513697031068UL;10293785431318356240UL;8599862975129558302UL;2241612777117998600UL;6627940788786378806UL;

            11248613652772964840UL;9867562046520357430UL;10762961564886105086UL;17912360135266294252UL;6137801022687168534UL;7450294350237636330UL;8673003316156722122UL;1551584234406051084UL;
            8879851239734444310UL;3298086420824746388UL;12290672110953044322UL;4377310946238480948UL;14124516079542267716UL;18429377446360330148UL;154925330222003822UL;3253324007385666938UL;
            3522617902310212192UL;3823763627277939174UL;13040344846727103428UL;9365370363932440862UL;2601093092202284894UL;12306598068256060004UL;6444051603838365636UL;13435721984002998476UL;
            11490927046042207184UL;10213411068904417604UL;16134197443524259318UL;3570629337421124066UL;10689627290620898206UL;18286683842429065230UL;15244151151964193454UL;5640097913579118294UL;
            9258384421522928408UL;2649882614677790050UL;9207855004198191824UL;10336055121312686000UL;9788236449784354374UL;230929291847714332UL;17082565069101918352UL;9523970584533592504UL;
            16810027511544030078UL;4471254318550087450UL;3780261039075246620UL;7017687316345435632UL;16067344076312222392UL;12460256599674315226UL;346174256802339310UL;8184517372502489226UL;
            11815712727279033294UL;14164477658675063572UL;3286619963997639364UL;15137681719951228660UL;5551080661963290624UL;13193019507992621266UL;5661196312708540864UL;3812203635369484026UL;
            14586928056061963040UL;11572057666775746064UL;12261080388853408614UL;11530480955062890738UL;5905715184619594950UL;2108558540771919448UL;1876310604511111936UL;570757121617527854UL;

            12574549755802785100UL;16443082542517785584UL;13660257824871647756UL;10375864877109868060UL;1283349257239643672UL;10480357514724298848UL;2102062019674942696UL;989790992628661580UL;
            14939652393423059292UL;231455403060740746UL;15392985165526237332UL;5893899204362377590UL;15008487300607378992UL;11377605300049401144UL;5493943625605771438UL;15084802208311748772UL;
            13081355929189939042UL;7691848474250524724UL;11623911448789886910UL;13148064604868513030UL;13163162833643235934UL;11059634676581784930UL;10285715861788859010UL;1125679358816511802UL;
            866560257097973228UL;16327211911960170402UL;753015219923774866UL;16020360496210947446UL;17559545064826196778UL;17632211976902572378UL;6001120892410884796UL;13021499343000033068UL;
            14651886035150488788UL;17043919162345589338UL;9418378763215436714UL;11515131931290159184UL;12041514478951658432UL;604370375018902232UL;10433813284759390520UL;11386371170357585286UL;
            13804241403229057346UL;6029395824271849256UL;12328732560774604488UL;8657823677826162866UL;5082818429977555956UL;13788688739026655074UL;15389883126715731282UL;13188842905087081942UL;
            6004212527046359542UL;151682343326847282UL;13121484094528126202UL;9026882584342862000UL;10907593889918158360UL;7824692746031570184UL;9231422046861836774UL;13514074272773039012UL;
            3100982014055121238UL;14757592218523752370UL;9998502826155052952UL;10867335607806085638UL;236251896405141026UL;4633802842890611318UL;12290216048587548728UL;6343997214846151486UL;

            12546256788429414614UL;7346590159090898872UL;1910645845191885626UL;7613456991998864408UL;1257300629547237890UL;15982970140982851124UL;18065977918562117988UL;13354618790967023204UL;
            7862542064937412426UL;8640504691416745384UL;11132913189808230050UL;6883576888016815548UL;5895275992186628152UL;13407605161039092976UL;16613750691006366182UL;9257545216548539448UL;
            16031602835462559762UL;12174142934909439442UL;17729850319316984376UL;7021705261165517812UL;10765314813941717070UL;14316450804107691086UL;16975404262333382076UL;12095962101009375446UL;
            5434804966314244320UL;10477307858349194114UL;15519704187775219932UL;2309022557315340600UL;5558053865366496958UL;8363780747429658572UL;9761671972773884808UL;8776585492341382752UL;
            7702142152139308852UL;13982852161346350606UL;15794392850095949078UL;3072201955657152758UL;12435133696824789186UL;5155623077663366592UL;3840470406078852464UL;15546035504034243142UL;
            2153672793673846158UL;7041908033609735608UL;15407705149790403162UL;16496591524907421450UL;10558048989957822634UL;15338953791704782694UL;1402407589169538244UL;2098453738245165024UL;
            5615827304220133966UL;12409142197339343588UL;4767223267309505778UL;17620047505688233498UL;2790610284495220908UL;588320950435257288UL;11202678572098892374UL;1273054796030972944UL;
            7895845664058799472UL;8611949344282249520UL;1116144909379674922UL;12332943432442630428UL;2901918370502331920UL;14402401161379450964UL;15569887859930327822UL;9367848067952692314UL;

            12815326686472519484UL;5308181965105809754UL;5164919086280637590UL;8461387537298351672UL;2662446597911936862UL;7487674107073322950UL;8705932712288014476UL;14674061861435386334UL;
            5866898558452488668UL;14436135406284140414UL;4916208669931043272UL;13860978617199743472UL;11759249471220983190UL;14582570900866408460UL;17993561152574328192UL;18360075976607102910UL;
            16927975685139029548UL;13860915769745715402UL;18057511982608164880UL;14145454402284114474UL;14846463133546700078UL;17049882522642407632UL;6554014740719358680UL;16390374196251235456UL;
            4610142609092565864UL;13846625406451411828UL;4675043300638850448UL;16956667491188383846UL;13854169207705695788UL;5432284267464161364UL;4114478815145405460UL;18210450856010932972UL;
            4097805779587791624UL;17439898375771120804UL;7821290855422958278UL;7465687259897330378UL;6217875029049333378UL;4528270037247371610UL;18335148490022473244UL;5979548621488877694UL;
            5565462408955299854UL;17513820594441886616UL;8059175870235130430UL;12772173059196268520UL;17858233329294182226UL;5169737541088808380UL;14119324954798424146UL;8331620850412589616UL;
            5849093360039291666UL;13191819278277878280UL;3566093324279633994UL;15434043348652268126UL;16564904576723576666UL;8896563372544975064UL;900501349286044254UL;1835865508081663162UL;
            8149796299673973868UL;18192459421073970660UL;13933898763577119544UL;4919137995194581108UL;3939666128435692462UL;4587419056913994656UL;16310497896638908144UL;15165612748254508654UL;

            12366868093159904624UL;7071520018226250700UL;13746598835393570586UL;4056986500812381822UL;2508284103695684746UL;6136693039834339942UL;17435856759099910106UL;10632599001342539102UL;
            11482069868457939428UL;514038740218592392UL;12910615018616371894UL;5104883016668304598UL;6590881878555721176UL;9810678521111707240UL;17500113387849201650UL;244857272548357748UL;
            10013573926248506846UL;11393973100561011518UL;5995943575768863286UL;849207472151222556UL;11775213702508580226UL;9515175945957788830UL;10222338128858799208UL;17817351815007175904UL;
            2928231783453783960UL;6623179149250691880UL;12613575558639053322UL;5852086188165532564UL;13406127313102857474UL;13113184387886830880UL;5042015534591917864UL;8330511889702720014UL;
            13814624480221141648UL;3707383914834924992UL;10174021227196133278UL;832893490561721676UL;13219118853260988798UL;17630249976327248250UL;14198408671021479692UL;17908765174969641832UL;
            14574288419507035364UL;18165563324048120612UL;6377777309180521800UL;237132834574475890UL;1375199495711533578UL;6145342344436314854UL;8682252018951690100UL;16282770128994842100UL;
            11416208634796958950UL;16231092672143551398UL;746667730550664964UL;16225209753543096664UL;10949552583810700578UL;16637675475371771328UL;6236718955264179728UL;8146465695421072112UL;
            10758656707043074572UL;4076542697265433868UL;10831816128657615714UL;15394725236662833850UL;18120307938701317816UL;1652996859802113722UL;8988838764815750566UL;795351071877884504UL;

            17878332885672964256UL;16395961803841195792UL;707868595208393244UL;13307774478803832746UL;1327116449268315266UL;9025073844776002672UL;16720452952253915780UL;14989933521962998760UL;
            12006799496238147774UL;14496648668261409114UL;7311336330078810476UL;17653504862401133978UL;10344936442849947062UL;5594959960650556686UL;12849989987903973270UL;17080542646738804964UL;
            8165777324835923828UL;8590302529124563812UL;18061798752881017744UL;17807648424890013306UL;4366108772990137730UL;5698200627028185684UL;5223586336974252988UL;6225425788532058984UL;
            15505334001111155972UL;5503992139699058776UL;14404643434200569322UL;16755898552040317206UL;11393096563007311330UL;6170761638116643604UL;9744387922668267206UL;1026296539312930600UL;
            11141545058220513362UL;8145813248361897896UL;10800645511383830534UL;10102077514590306772UL;12383825779911782458UL;3976598833844332676UL;17255663846652501552UL;11578849120627219942UL;
            2532424811164546202UL;18064356285894269800UL;5409673417863786502UL;4309318727919902738UL;3166037839758037720UL;3970907044860029558UL;16049534591075511026UL;18402160992570704650UL;
            3782292292005865524UL;8863990959943741396UL;13033749707467157726UL;17532025814040036556UL;163899639543454376UL;18353067935968824972UL;15725197237754938168UL;9382923163885928194UL;
            6433574609701471884UL;16297142276229853870UL;2908510606657886054UL;7247395980194717016UL;15630074183867346020UL;8461644774752148246UL;16064602700478823576UL;17926923448347010736UL;

            9487486157735094776UL;14124570221350054228UL;3680301562690119350UL;7375616808325007050UL;9533380581694341054UL;12865734730094919280UL;90204381680091592UL;13214670154856057272UL;
            13434864727106532188UL;2740717897632605150UL;500208844617005708UL;9149520903991927188UL;12108611978795476170UL;532772026695319424UL;6015231548642250800UL;1597952489800842154UL;
            8064728095292593200UL;8751624525923985938UL;8454994619192545612UL;9401795421094763294UL;11006597023240581020UL;8929880101355350294UL;10898683490120096402UL;2503482871029603466UL;
            8688593299454969700UL;4745382974813725692UL;14713663033765832928UL;14691323625914904334UL;1183925369615376470UL;1607330906151391444UL;10977525955529393394UL;5026182556072277570UL;
            4552081536705130104UL;17536078889597345636UL;18382275111665075668UL;10526590019470424770UL;16526288719004847814UL;10489562342107869380UL;8738667137346416186UL;14004971441620346428UL;
            893073461423457380UL;17683758848367226490UL;16527097393569827420UL;2735142674099284328UL;9662802877124375424UL;8321713552188327638UL;8173669471044320106UL;17793811270367016646UL;
            6469010582208754026UL;385263916836220764UL;13997178071016099374UL;6493273471255733094UL;16398223291507912746UL;12982011291321345124UL;8398222169031995414UL;12525029543551683222UL;
            3838106435186607694UL;16363275646207100230UL;8157924686814188156UL;10345999663263833660UL;5885189947705602570UL;11295261360414968882UL;5944773567884435270UL;3462668301945089422UL
        |]
    //random number used to double check position (needed?) - used to check whether a position is same as one previously checked
    let HashCodesB =
        [|
            16164111449390318276UL;11419626980698143882UL;3217985813656852606UL;11925939290598446094UL;16807230890854361004UL;8132383134553493882UL;16234001359038311548UL;2222980806129073348UL;
            12147126317193968708UL;12662676227780305028UL;7659016084700499920UL;15919405972837025858UL;5336156159565083352UL;8423454768724593766UL;2169585031632404044UL;14142541111985433560UL;
            2583011259453287228UL;11286844808399943576UL;8374353354055572742UL;6722194691202237510UL;3911546955319814036UL;14360802384881332098UL;6382525139320483186UL;11397912141720563588UL;
            14899448643725947014UL;10897806443353667966UL;14543834309523647952UL;1343268705450754474UL;12872137863462285308UL;14161292543141927346UL;12095639110668341110UL;2910582744648050790UL;
            5564895272546551192UL;13816528074761504572UL;4578164982259605850UL;12865709233171828210UL;14856112534707616532UL;17141448801886020236UL;6326927501705036350UL;13940937044014384492UL;
            11694505150302226348UL;7921763992326395500UL;7697700509538371894UL;4534448629453279352UL;2845043025763917274UL;12394706142921790328UL;9305303698502041320UL;6745192885713086760UL;
            12213175712255584760UL;6656715557600338032UL;11048561003910172554UL;11110761397977851390UL;12939332314972678396UL;15198141740616770612UL;11040779257252314990UL;17381604467550285786UL;
            4770697911055951336UL;8757222608347024348UL;1816873549623978120UL;5326478122178533130UL;1087289619159340200UL;11855682151452920014UL;7511779647440295244UL;18318385218204224596UL;

            9487486157735094776UL;14124570221350054228UL;3680301562690119350UL;7375616808325007050UL;9533380581694341054UL;12865734730094919280UL;90204381680091592UL;13214670154856057272UL;
            13434864727106532188UL;2740717897632605150UL;500208844617005708UL;9149520903991927188UL;12108611978795476170UL;532772026695319424UL;6015231548642250800UL;1597952489800842154UL;
            8064728095292593200UL;8751624525923985938UL;8454994619192545612UL;9401795421094763294UL;11006597023240581020UL;8929880101355350294UL;10898683490120096402UL;2503482871029603466UL;
            8688593299454969700UL;4745382974813725692UL;14713663033765832928UL;14691323625914904334UL;1183925369615376470UL;1607330906151391444UL;10977525955529393394UL;5026182556072277570UL;
            4552081536705130104UL;17536078889597345636UL;18382275111665075668UL;10526590019470424770UL;16526288719004847814UL;10489562342107869380UL;8738667137346416186UL;14004971441620346428UL;
            893073461423457380UL;17683758848367226490UL;16527097393569827420UL;2735142674099284328UL;9662802877124375424UL;8321713552188327638UL;8173669471044320106UL;17793811270367016646UL;
            6469010582208754026UL;385263916836220764UL;13997178071016099374UL;6493273471255733094UL;16398223291507912746UL;12982011291321345124UL;8398222169031995414UL;12525029543551683222UL;
            3838106435186607694UL;16363275646207100230UL;8157924686814188156UL;10345999663263833660UL;5885189947705602570UL;11295261360414968882UL;5944773567884435270UL;3462668301945089422UL;

            3344936817192064422UL;17401255372786163664UL;3872772219482588148UL;6137944081860966718UL;3055734278902581824UL;6945616616493087180UL;18336212114342542160UL;11923731121064839160UL;
            4519098124918913706UL;12117983363740902858UL;7493560463396383966UL;7147016527897967860UL;5792910241466836596UL;9724127137522948202UL;6243118658839786780UL;13885013441783436160UL;
            4778609824380132206UL;7011974445843263536UL;6359370794641180748UL;1665806381701613704UL;7205507689655680604UL;1227265249673702986UL;3466313199543695154UL;4223256977058918776UL;
            15647860166391471038UL;17143997206320015422UL;18151665473222025196UL;1209194083007403446UL;8501083085299244810UL;7713214028065421518UL;15584711205387884816UL;8607440584317730526UL;
            16877935960819523498UL;152479391901382770UL;6682814327425431328UL;3214828881490714820UL;16937312275420067744UL;13348490641085181504UL;17803472016395178612UL;6008548173903631042UL;
            2306524264243502384UL;3917445192178345188UL;13323860474076086898UL;1509493364220519758UL;297939423860401882UL;11773351517274655728UL;6394920637879756110UL;745618706588083402UL;
            12425172210749952908UL;1799385813435961628UL;1183216649081491400UL;9846358368954191780UL;9547455301444961018UL;8672793385275941226UL;7290761809530633956UL;765697254636148538UL;
            16744140777532759624UL;7512057434271677736UL;10329939830924301418UL;6915763866881108846UL;15537502923271363082UL;13842827890401801300UL;13275445886735766078UL;12396036464926460714UL;

            1388206476602946332UL;12604574175452993446UL;8789111346873611468UL;12509962012664031358UL;2850409377252911622UL;7947066416550965116UL;3894409182713062620UL;9108449337907075364UL;
            10864638592470718524UL;162719520516691236UL;16957343228882379696UL;14333748128682875422UL;8622737960702205888UL;4196169684417923184UL;16760440721733045048UL;16644990216076477868UL;
            2484296943318739496UL;15758064161420148116UL;1823742412779931420UL;13371718722184545162UL;17674727640378858442UL;18263782288417572360UL;15318000466827519830UL;11032596358787439946UL;
            245840885151265736UL;11728243866590838336UL;6918118154900648708UL;688765597643637744UL;2377264675294192380UL;13455269893442642120UL;17850438961445686804UL;1647207715815469688UL;
            13733325228269359148UL;2419332685934222516UL;1207884240307078588UL;14922888442592148292UL;3458463330032783658UL;7311935566668900388UL;8970422960993277058UL;8658599938099139622UL;
            3054230502498618394UL;12397960654450837472UL;4872978039965947488UL;12319733408774079494UL;4488893741487824520UL;5864077424484462482UL;14708166006776717536UL;13481247054196810926UL;
            13065572577010239946UL;3717179871896849274UL;9470609289005981402UL;7243170530067618406UL;7702391841130663460UL;16899418129538396328UL;8648599374172182154UL;15345423296027576404UL;
            16017417564740220342UL;14240555326155257928UL;3224164359748396308UL;14599131993280338370UL;14173933314009159734UL;9255057131345148678UL;15254209989920391856UL;13513619034292722414UL;

            11960803740756832924UL;14990660218859227290UL;16288381560637520820UL;2824879557307266218UL;15183388117525220182UL;1503590481965655042UL;2209006097086652012UL;4446252414168005800UL;
            16627819364469247264UL;2823247940770448108UL;1489334515496216442UL;3344555996350009396UL;15393380973037338750UL;6660139428992074438UL;18069099554953020570UL;17021260773280033596UL;
            16424468978589491124UL;12155690854037219092UL;647912243374668548UL;5517684647854983110UL;2088246732055896240UL;9056460280224703648UL;17763397553263983140UL;4830537618690397268UL;
            17980888931579611550UL;11134577441628307144UL;15031757321199757096UL;5567343718582756226UL;15424318866853701712UL;4893622921252694744UL;4442863504296324750UL;17946061138965074786UL;
            4907239486881513522UL;12056193894740891242UL;11225481049109788580UL;13899030677294564950UL;5433617801164976038UL;11525293649402579286UL;17497955483299454350UL;14692811270157588404UL;
            9705089884582494798UL;7259847420451718516UL;8221357299467336550UL;6548382687886189258UL;11634337934724001780UL;16428270785335272646UL;17328373334178607072UL;4833306833697490194UL;
            15237347939434069096UL;11624782695541192564UL;17753791507520697468UL;9378923982208539298UL;16766949790996661768UL;11984010350781213032UL;4661576775331958580UL;5912477841887156832UL;
            1618399316511475318UL;4797824379757225494UL;9769827708287636890UL;9978286463820157612UL;17654605667685993402UL;2220029364424753414UL;7712628500036896260UL;601977354988185498UL;

            16198045497286566170UL;15066518817651085512UL;11674572506859055770UL;7782756029441895324UL;18101358491627647688UL;6817607294387684190UL;12900583637825338708UL;11782521172850240680UL;
            10876591988429144744UL;8118705223050341604UL;8847485636800003558UL;17626202140096324018UL;1265330542575019934UL;7791948755286187134UL;5904245549665420388UL;15983459163060770168UL;
            10599896774180588702UL;5028303617488669722UL;823371139033120566UL;18163081935239432698UL;10894853658992277032UL;265569971633279628UL;13360476310507423768UL;16674172752312285190UL;
            6204552001601576094UL;12665639170158307730UL;9677053844687245296UL;715172232508078580UL;11305249860831420962UL;14486990784187916142UL;7424916963188750484UL;12958719887580342884UL;
            18133637841071954684UL;169869480430118332UL;15943973537935101956UL;16352724000820828736UL;13244631872682564440UL;2352712817505352924UL;1896037200654681584UL;12715735085130484460UL;
            6487554510384000746UL;881525408458183072UL;7210548449120267868UL;1398477378895203516UL;10356496154026974762UL;4396440639342169366UL;6425232113267501650UL;7522081727259491122UL;
            3053463061419457926UL;16212486860888469692UL;15701156741900881596UL;6154506516404304248UL;8407827639560824862UL;3965224356486437650UL;8364280396468769218UL;4493014910987650996UL;
            14833773787325157452UL;8208885737841763058UL;12547545232467850670UL;17067552817000416036UL;11810455630983138800UL;15766617408063377366UL;8370205410411106274UL;3160859810804582384UL;

            10462599958619452926UL;9590774916705603800UL;4715682666706228304UL;17353170092904189052UL;13218976393853551352UL;18426199526952577922UL;2537916211726828882UL;4059388623729016168UL;
            7016989038808194238UL;3550629857938950998UL;9406326415411671662UL;8817703211919315350UL;9421681572500188900UL;1513687319508271546UL;3281414890847066886UL;10878665241293195498UL;
            17906835325985481218UL;9804850597546979672UL;10198234208526790454UL;6286900586539669172UL;6300209080211638992UL;12772396456848845582UL;10147596510906151826UL;15270665258762884380UL;
            3885985236056332098UL;3821655003481266838UL;906111883223352318UL;9575304355208091150UL;7853117846141967704UL;10436402738964682492UL;2399677004377746004UL;2330187564018793040UL;
            5092216094589542912UL;8990305876690967686UL;17454800020768591530UL;6601523162001835412UL;9162744767253837856UL;15363365894524788038UL;11692135621170375500UL;8963449335441989268UL;
            12735775156117007562UL;2481312222658142886UL;8445034828652654222UL;5251043379906178128UL;4821441965881279262UL;10311436906228803156UL;17778827883096942996UL;17686970880736581900UL;
            8336382523324132006UL;16255104434813394774UL;3913556288757961778UL;171521669097497030UL;584704248724122980UL;4714428131092498046UL;2229850204507612068UL;14650188408228485402UL;
            8021228613930264046UL;2449431685254533530UL;5261855366043898568UL;3780490088037841778UL;1646179932179754454UL;7601402561819458914UL;16918816041532370436UL;3014964941227474472UL;

            18223988674063759430UL;3065727362606402448UL;2852017506776277202UL;6923241868541995068UL;2297334295715853306UL;17809212399164824898UL;2922280118173986138UL;17378007342082060362UL;
            3320755042184102914UL;724836288104314222UL;11077774764964415062UL;4016344871879019602UL;1117147010581946026UL;11840300856067310662UL;6135046714864846188UL;1427419194335940272UL;
            1683767117336272824UL;11318966227185947890UL;346325405127319148UL;13590720889076300244UL;5258571877593294612UL;3023081284428176814UL;9633995897634344226UL;8563785085560427834UL;
            10639846026616021106UL;16913467334468387362UL;9625362733124106984UL;4921556863397514232UL;8806455934410818158UL;15603235995724695602UL;14529333511805631792UL;11992149592614640978UL;
            1118114318139987572UL;15881120350659289468UL;9932369911372744808UL;1263107432744127310UL;10495115382784571424UL;10394179632060235688UL;1072078954232623542UL;8001379085089345252UL;
            14571153690363450594UL;18080009409451474376UL;10859609056686907842UL;16694974174616433532UL;15943045085229456642UL;6657752632003558522UL;14187144686631535720UL;12825088730625920334UL;
            9423838313605508164UL;5851573980567836476UL;17437735250958123006UL;1612822398473347816UL;13979849410623282742UL;14083899494126822390UL;8076136678948908538UL;8316372784867549388UL;
            10455716791673477574UL;3682794777767255526UL;10958801983034516756UL;12729551741726962170UL;13129688738319188944UL;15962029641640367996UL;14258323761856670180UL;5509092894363686516UL;

            10068053600909066890UL;13799171697315485676UL;9739365072488327254UL;11874697635848993798UL;7801735642456237648UL;18241918703131716080UL;10248505701661230624UL;7447117981548911460UL;
            12651890771728175436UL;16601918969050281610UL;17082820184183526068UL;14650797215031060090UL;12478629344555555540UL;13129641151611251812UL;11252148081318951742UL;173269718981918134UL;
            11482475308543774572UL;17888456028049406822UL;1619799392005881976UL;15502974029270414676UL;17056811981845864078UL;17237161170146515540UL;9521787808840460864UL;3164765276127555282UL;
            883590126892036114UL;8069981280346567918UL;9017313689349954384UL;2522394388160319414UL;1671648926279625174UL;7195721485905770262UL;14536203656731610288UL;10514755715993673278UL;
            1941273072697034344UL;18025671786291583082UL;6783223017470087266UL;1355951601139888354UL;982393362466389638UL;4943555246134846860UL;16839243796718438870UL;16227265772712192788UL;
            744326921405722688UL;980444972375847262UL;5928409892568210270UL;14868318205222754874UL;15387288710406050694UL;9590804986818398322UL;15868571213089823552UL;14387935302503020102UL;
            6372687002074867584UL;1108351406833023006UL;11154440976426839074UL;2069720140691574998UL;17466306166046395422UL;17501951172993198334UL;18297197273766008716UL;9214628855025347984UL;
            11809026131879737050UL;2432819917653656884UL;4138046899647222852UL;17404266352926865602UL;961386131944984904UL;13188951156669255926UL;2119544031616778080UL;11433384966034940488UL;

            8322112754799500742UL;7225642572412515128UL;16434870717972331498UL;18129098069361896392UL;7535505947618204358UL;7008835965154161184UL;18149635609825984112UL;14629226367319797530UL;
            5413888737599345958UL;6539045591447072830UL;14658852713812994918UL;3675839463133400426UL;13040374761001590512UL;3942369572321758478UL;16720389394336408220UL;6988555750320782744UL;
            12117245228928768876UL;10381468422342671066UL;9604107129766883004UL;11743111119337055194UL;14597581450423504332UL;14483278801542348128UL;1283210232357942928UL;1859944239777366358UL;
            16672359311042229516UL;219242288836095086UL;11408373454018974092UL;2271906838757922212UL;17700030838712093036UL;15237144689927921496UL;17133762144956998970UL;5831743846966709716UL;
            743087363054682110UL;18419051819058372604UL;4356795774558063724UL;14700385272851312916UL;12039882048416392630UL;16196474819539037612UL;11258733781964864974UL;4832651594839572504UL;
            3778552368018812756UL;978098358104925228UL;546171797364455180UL;7703637302521788278UL;14067005739089945594UL;555784113415420132UL;2491530014219976474UL;6323263865325055206UL;
            17110382321811261534UL;5360536045565975116UL;5008044277141369982UL;14864038932044773816UL;8796738194901524976UL;4179121256977483030UL;15457554482660151430UL;18152534996168928702UL;
            13839173849530016616UL;2393950385219159252UL;6214331500205344866UL;2072128787709894824UL;17098862191251694284UL;11646715965269190174UL;13452066485371323398UL;9451166966822417524UL;

            10495042241935330410UL;2601606175441845348UL;10367993686308191224UL;10164838763319879460UL;1521772675380525588UL;4398341780718700120UL;1438329793137006484UL;18335358809734198016UL;
            9093200633068932274UL;17193590326275932878UL;5314402126269244472UL;17868314474924842950UL;12318254144001124286UL;10341321453020809156UL;16739921964800787266UL;16729828975924719674UL;
            962448725944479930UL;18164082327507296586UL;11791875157165937846UL;9927655835267422072UL;3958585910643133700UL;10139761499630696038UL;2612874156317429702UL;7515781022277638516UL;
            17990136961915045006UL;2399669595651317836UL;4949006358503682642UL;17261961305020330214UL;17617114463836888820UL;5992112515661624496UL;13661938035773928480UL;7969512928110374624UL;
            13748307318991879006UL;16671203560323775860UL;3366045570271433048UL;5178313569890927228UL;9906544038235355194UL;17236418288356601574UL;4363823105989992508UL;13452548650393591772UL;
            15853925466626380190UL;14335641328221141672UL;11035692330437480184UL;16553064582327885182UL;7327486438620608978UL;8751297039553502920UL;11776442246661461690UL;16341912906657879792UL;
            3821937136091376064UL;2065517003299732356UL;5973897556780577726UL;2599997796122445954UL;11483806333275390578UL;11386227819947500748UL;1148978756265490312UL;15372530556150395002UL;
            7701127672722700530UL;2456437275545042398UL;1788841129749838418UL;9034852914631467322UL;7205281975570448970UL;6927577836091814226UL;11319370591320447482UL;13834196677911322920UL;

            17388653037478843658UL;11557135153390448590UL;9859206372499629422UL;16624487750664043566UL;7106630031987165560UL;3910154057094059388UL;12894141377048351622UL;13540976065827261862UL;
            3573688034213356290UL;1527128316864602874UL;17110669282237584016UL;18056164662192764348UL;17141877818507296388UL;4965628949440231340UL;18298353002015094966UL;16887546230194214712UL;
            2840567267229847794UL;2971880294845069118UL;7040298230129772354UL;7684328556499053144UL;11932924059990722686UL;10523335865074583706UL;14760279723054836054UL;156347100199929722UL;
            8241080479915107916UL;9236586761717703078UL;9286931486468124070UL;14280678413949263798UL;4287105055708683248UL;8061420135730580830UL;6406353852029708568UL;17687614917818022532UL;
            837857564621685516UL;15807538121242558212UL;5467677016347662774UL;6510642643446067836UL;17953722952944028036UL;3477592319808755624UL;18375871809213248470UL;16721777939452724410UL;
            316235633896686928UL;3786798668263310446UL;15384207778861953472UL;1908507186407541218UL;16940806511038869794UL;18419719690588134352UL;5456794551001800152UL;14317086327631429430UL;
            8902548288816792476UL;7535294223235741036UL;16023588832029554088UL;187635573527500196UL;15022709884042392764UL;9514239531872336028UL;2986415377146285540UL;12339248604114694174UL;
            10102939798094035212UL;17200596260016495288UL;6346111505475475434UL;1042966345465018442UL;9085504805684424870UL;17753811533601666020UL;4771683997878629738UL;16820290063667914472UL;

            12546256788429414614UL;7346590159090898872UL;1910645845191885626UL;7613456991998864408UL;1257300629547237890UL;15982970140982851124UL;18065977918562117988UL;13354618790967023204UL;
            7862542064937412426UL;8640504691416745384UL;11132913189808230050UL;6883576888016815548UL;5895275992186628152UL;13407605161039092976UL;16613750691006366182UL;9257545216548539448UL;
            16031602835462559762UL;12174142934909439442UL;17729850319316984376UL;7021705261165517812UL;10765314813941717070UL;14316450804107691086UL;16975404262333382076UL;12095962101009375446UL;
            5434804966314244320UL;10477307858349194114UL;15519704187775219932UL;2309022557315340600UL;5558053865366496958UL;8363780747429658572UL;9761671972773884808UL;8776585492341382752UL;
            7702142152139308852UL;13982852161346350606UL;15794392850095949078UL;3072201955657152758UL;12435133696824789186UL;5155623077663366592UL;3840470406078852464UL;15546035504034243142UL;
            2153672793673846158UL;7041908033609735608UL;15407705149790403162UL;16496591524907421450UL;10558048989957822634UL;15338953791704782694UL;1402407589169538244UL;2098453738245165024UL;
            5615827304220133966UL;12409142197339343588UL;4767223267309505778UL;17620047505688233498UL;2790610284495220908UL;588320950435257288UL;11202678572098892374UL;1273054796030972944UL;
            7895845664058799472UL;8611949344282249520UL;1116144909379674922UL;12332943432442630428UL;2901918370502331920UL;14402401161379450964UL;15569887859930327822UL;9367848067952692314UL;

            12815326686472519484UL;5308181965105809754UL;5164919086280637590UL;8461387537298351672UL;2662446597911936862UL;7487674107073322950UL;8705932712288014476UL;14674061861435386334UL;
            5866898558452488668UL;14436135406284140414UL;4916208669931043272UL;13860978617199743472UL;11759249471220983190UL;14582570900866408460UL;17993561152574328192UL;18360075976607102910UL;
            16927975685139029548UL;13860915769745715402UL;18057511982608164880UL;14145454402284114474UL;14846463133546700078UL;17049882522642407632UL;6554014740719358680UL;16390374196251235456UL;
            4610142609092565864UL;13846625406451411828UL;4675043300638850448UL;16956667491188383846UL;13854169207705695788UL;5432284267464161364UL;4114478815145405460UL;18210450856010932972UL;
            4097805779587791624UL;17439898375771120804UL;7821290855422958278UL;7465687259897330378UL;6217875029049333378UL;4528270037247371610UL;18335148490022473244UL;5979548621488877694UL;
            5565462408955299854UL;17513820594441886616UL;8059175870235130430UL;12772173059196268520UL;17858233329294182226UL;5169737541088808380UL;14119324954798424146UL;8331620850412589616UL;
            5849093360039291666UL;13191819278277878280UL;3566093324279633994UL;15434043348652268126UL;16564904576723576666UL;8896563372544975064UL;900501349286044254UL;1835865508081663162UL;
            8149796299673973868UL;18192459421073970660UL;13933898763577119544UL;4919137995194581108UL;3939666128435692462UL;4587419056913994656UL;16310497896638908144UL;15165612748254508654UL;

            12366868093159904624UL;7071520018226250700UL;13746598835393570586UL;4056986500812381822UL;2508284103695684746UL;6136693039834339942UL;17435856759099910106UL;10632599001342539102UL;
            11482069868457939428UL;514038740218592392UL;12910615018616371894UL;5104883016668304598UL;6590881878555721176UL;9810678521111707240UL;17500113387849201650UL;244857272548357748UL;
            10013573926248506846UL;11393973100561011518UL;5995943575768863286UL;849207472151222556UL;11775213702508580226UL;9515175945957788830UL;10222338128858799208UL;17817351815007175904UL;
            2928231783453783960UL;6623179149250691880UL;12613575558639053322UL;5852086188165532564UL;13406127313102857474UL;13113184387886830880UL;5042015534591917864UL;8330511889702720014UL;
            13814624480221141648UL;3707383914834924992UL;10174021227196133278UL;832893490561721676UL;13219118853260988798UL;17630249976327248250UL;14198408671021479692UL;17908765174969641832UL;
            14574288419507035364UL;18165563324048120612UL;6377777309180521800UL;237132834574475890UL;1375199495711533578UL;6145342344436314854UL;8682252018951690100UL;16282770128994842100UL;
            11416208634796958950UL;16231092672143551398UL;746667730550664964UL;16225209753543096664UL;10949552583810700578UL;16637675475371771328UL;6236718955264179728UL;8146465695421072112UL;
            10758656707043074572UL;4076542697265433868UL;10831816128657615714UL;15394725236662833850UL;18120307938701317816UL;1652996859802113722UL;8988838764815750566UL;795351071877884504UL;

            17878332885672964256UL;16395961803841195792UL;707868595208393244UL;13307774478803832746UL;1327116449268315266UL;9025073844776002672UL;16720452952253915780UL;14989933521962998760UL;
            12006799496238147774UL;14496648668261409114UL;7311336330078810476UL;17653504862401133978UL;10344936442849947062UL;5594959960650556686UL;12849989987903973270UL;17080542646738804964UL;
            8165777324835923828UL;8590302529124563812UL;18061798752881017744UL;17807648424890013306UL;4366108772990137730UL;5698200627028185684UL;5223586336974252988UL;6225425788532058984UL;
            15505334001111155972UL;5503992139699058776UL;14404643434200569322UL;16755898552040317206UL;11393096563007311330UL;6170761638116643604UL;9744387922668267206UL;1026296539312930600UL;
            11141545058220513362UL;8145813248361897896UL;10800645511383830534UL;10102077514590306772UL;12383825779911782458UL;3976598833844332676UL;17255663846652501552UL;11578849120627219942UL;
            2532424811164546202UL;18064356285894269800UL;5409673417863786502UL;4309318727919902738UL;3166037839758037720UL;3970907044860029558UL;16049534591075511026UL;18402160992570704650UL;
            3782292292005865524UL;8863990959943741396UL;13033749707467157726UL;17532025814040036556UL;163899639543454376UL;18353067935968824972UL;15725197237754938168UL;9382923163885928194UL;
            6433574609701471884UL;16297142276229853870UL;2908510606657886054UL;7247395980194717016UL;15630074183867346020UL;8461644774752148246UL;16064602700478823576UL;17926923448347010736UL;

            6557995217205458958UL;3216546429887213718UL;10981975557637945592UL;13117948053612451546UL;16462319544570117268UL;14109089931958414830UL;7784257433824872028UL;12575758863506724218UL;
            5452803369408346770UL;17504272207519905704UL;10076908662681196056UL;12181556996310766954UL;6618282532582206852UL;886584768689976646UL;5337735909196723884UL;1518236921046637970UL;
            15827119029725512510UL;9082962233660957234UL;1263297098503346738UL;13875222574635967674UL;16609127610647298318UL;10435515111652777838UL;18329661936892632940UL;5331746027401435792UL;
            1049717386564424156UL;9246948175640910896UL;17992694740464130014UL;11919617026173496926UL;942713142301085492UL;16767582443534198792UL;2343237112367443196UL;7706490310447073566UL;
            1180650458668525454UL;110739167744257384UL;15612783373802952686UL;12368533738239614404UL;4710529855387962032UL;1491317575964475796UL;7991609012807777138UL;13223305147380179598UL;
            9827852277825374356UL;8971731418860897980UL;5890489662268004190UL;621233762326742028UL;11437796629142146816UL;14858882528073565038UL;523346254803746784UL;14883403326801949494UL;
            10568557893264073862UL;7767832610067314526UL;1588172969737753022UL;7365253622489937858UL;3475562964612195378UL;15378553259884894290UL;10258544682946854394UL;16471709323283427872UL;
            7387401186393507380UL;4836657810614330796UL;15117989234145937886UL;5053120470808326610UL;3415221099905780174UL;1032168018064794264UL;13326555077905273864UL;5458304681770616980UL;

            17545613622841681746UL;10501891328749148278UL;9426908387088153308UL;8877089434143743062UL;13459885476225016672UL;9185958386474511294UL;5120516392545654832UL;14165698063145622968UL;
            6847708915845601312UL;7355483455673498960UL;16494535249479569034UL;11705033033488649218UL;18251350343559018236UL;15065819270541461548UL;11376452399259816238UL;8593254708121809928UL;
            3766479623975822972UL;14086321667423203714UL;8622476836776146302UL;12842960888468376816UL;4068737430762310318UL;14133956764673292544UL;9083206044346845834UL;4011875571403032608UL;
            15625060894836009252UL;1889265324647982124UL;3665329999209076784UL;6312111210106831900UL;5532502273248938888UL;13425407484649116734UL;17896713095005619428UL;4834726832543450412UL;
            5561303255605950664UL;7127197816163928908UL;2595006774291545308UL;12652930689033263362UL;3940050985010175540UL;13567225257720373740UL;10711626861993623774UL;147177847809271834UL;
            17477047963492222950UL;8136956387404159526UL;3117970724319799752UL;12147741636872885940UL;2242179716208357412UL;2562319680788492322UL;11061192320938775572UL;7908171076188569374UL;
            10498288624450659978UL;12563302206478880838UL;5730579894377095228UL;16308430302931869696UL;1831469209542535446UL;17992566768689471744UL;6394314967729364118UL;9945922527443908708UL;
            2383769403964594706UL;7243572543467171602UL;9673519885520955480UL;10302479083779678424UL;1222978968320988764UL;14116760955714134862UL;2778999516988478224UL;272137612191235292UL;

            18362019642220520632UL;17755149605427691238UL;8160413835264563194UL;7132858826473086762UL;1007724277759928980UL;15743651996523805876UL;16025805139638878002UL;5161082153409826282UL;
            4100462926474833894UL;18208079740419987330UL;12846472991818489784UL;12978259235470649460UL;103456753621245066UL;4651193507658424492UL;11390664131773545164UL;1691469575270734918UL;
            9801623276000129460UL;15400126094246462240UL;6962005964312803656UL;2710151849400758610UL;7163633941123730330UL;1436113090146831650UL;1214131491520122768UL;8288602715461326300UL;
            7209397833038329266UL;783510774798573244UL;17515929933458189902UL;17163480899148848852UL;379162074805962044UL;10359452548550129722UL;4904889499145281694UL;1730782921886347280UL;
            7733798654773319900UL;12083689413807324462UL;9733741507736632334UL;8563518115659578648UL;8234679590580718066UL;12635745401699872526UL;3515796062346602382UL;10313807708542751484UL;
            9590243228481784796UL;18312820394031351710UL;2268411402138529460UL;4541508915905349356UL;6640998182349241626UL;17062855046952176728UL;10862370304893891180UL;7344870253133488396UL;
            9839681346578731526UL;16129457661828346648UL;1010661346002988452UL;8927068749858475488UL;8947055826136189964UL;8222255366307327972UL;5068238261620947038UL;16561976205883417194UL;
            13876150851661739334UL;883937720935685786UL;2629899801469577772UL;12749005373783752508UL;7133681984040306688UL;10631558025487873470UL;2153981768149090976UL;13580534170312191286UL;

            8435020523903278100UL;3899549808124225056UL;11740181989979615358UL;2041080558069095060UL;15499985976758967078UL;16351352178717716834UL;3155488787503514122UL;8918355425615710116UL;
            1716338329987971662UL;8634976736576939216UL;1360184205345850660UL;80685516177902610UL;435671442675900540UL;9096124201126564186UL;15527634424542698474UL;1804657981933081670UL;
            1458585183149351304UL;15930460019289889874UL;9122907559677149454UL;1384733279166374968UL;3287866371596040874UL;11433439859207289334UL;16099084153461366154UL;8353404166395274294UL;
            7594431612145172426UL;5678654864300847890UL;2296316498868683128UL;16117104527415964124UL;14987129460127342310UL;18303810239017957078UL;18036186145600152580UL;7580821818782221008UL;
            8988132497386417792UL;15400483954176547520UL;5004883764012434498UL;5703741608894025110UL;5062492724851822130UL;5749127852241007686UL;14609076854938214498UL;6028471000313416526UL;
            5426572427479225114UL;12831947132453655008UL;2914874623825477326UL;1547932765128748618UL;10330657800124228258UL;1245833917906384314UL;9151243598656517166UL;13970250372540654636UL;
            15690282517834573640UL;5604322317368605636UL;16679931897902273436UL;1796595831797282574UL;8332875789471016014UL;3728652341858720794UL;7020228664937759766UL;9750376307427285518UL;
            1942847270524820678UL;8134801327608615504UL;4080113772526894578UL;2491070703886044058UL;13360655509619370760UL;4179639504456877008UL;2626178361387543956UL;6727224916781954734UL;

            697049003402709900UL;7321409807090816720UL;17901567487103664554UL;8507828525102310766UL;10433420987590654640UL;12016764149121530488UL;17308671610707428838UL;14009049094914124466UL;
            15287793111852817750UL;8398193963619866050UL;5008982554089882718UL;6625760951806960864UL;2995411598035499012UL;17342320092550096848UL;3741401159892176084UL;1407742525582738534UL;
            10643985204325275962UL;12492660627384936138UL;15023543365913601418UL;11241491059163425242UL;12412310737539243594UL;7022196888866678986UL;8902307296966089434UL;10965251883966128392UL;
            14244819358008232412UL;3496444803019880812UL;6547680326320028812UL;9996928622696526138UL;17550526766438310738UL;15074498431219699226UL;7550803613155793554UL;16649414371022742478UL;
            1986542532258149386UL;1778303755541528356UL;18115431151558693510UL;5384847065516003948UL;1859360829755063438UL;2335426881333950402UL;10041687238838600326UL;10333940178308817956UL;
            10457617226699114194UL;1519501693245038512UL;8294925956231854240UL;4420657647900632912UL;2947897131352196172UL;14062527908476704318UL;4059262799481613732UL;333160343173988928UL;
            11546802147115496736UL;7396825621132614272UL;15518522782322793380UL;6721404768863368010UL;11903292086227233898UL;6658021771352009420UL;14640054058612891042UL;11140487344450186652UL;
            7114792558576697934UL;3387505862897350554UL;15640531184607830958UL;16616720283676109202UL;9936727893764837680UL;17947404418416194658UL;13209421771296978272UL;8112652134469098058UL;

            5665404442519041296UL;11652329987666154062UL;13854588595341168890UL;6514112100154166760UL;3626875270923978286UL;16038900008469934550UL;2400067158618991236UL;13603071526515112366UL;
            1020499343493341262UL;3415488412138256228UL;4669837224676070028UL;7705332113226008316UL;852346498047127774UL;9285589157583961426UL;4120166983739494728UL;12698067291240684258UL;
            18229560719552215186UL;2069589819650391054UL;8147135925684561782UL;7447996661810213310UL;1815094731655449896UL;11295999133625140404UL;1208441532669388528UL;2831842216804409250UL;
            3373645269785229750UL;8572181569484468984UL;6168268300526695776UL;10392300361129127386UL;15135424525234907672UL;7686261396165508762UL;17132353351720071916UL;13284530247892685780UL;
            12247994756660140162UL;1166050697516006116UL;8821632965105408036UL;1842802062817658228UL;18075120208551426582UL;2723586755659008986UL;17863756796063009144UL;8053261149661880062UL;
            13253794882948269498UL;9988608050061241120UL;8742296581241379190UL;12303890603744907326UL;12204503846089050952UL;14459801701612119276UL;16597093992593754204UL;97473686188079102UL;
            6442228234539520012UL;12979411897087179894UL;14163305775019345300UL;15275631168831220392UL;10717209386685992858UL;9704491539566463286UL;3541499240924978424UL;2441609699312500632UL;
            7992470224703833816UL;3213469385909055804UL;12088361536403549074UL;8993005965618334956UL;10466394278834302270UL;1659100440994349686UL;735439209011868520UL;1302011778386667484UL;

            17377572500295275834UL;6003140462065580108UL;15064357806456510530UL;8938545766682692900UL;12044960507722261700UL;6672931493094911108UL;4205932370964761232UL;3273263430766591282UL;
            12954893346695653204UL;4456581349884521276UL;11964959556245653746UL;14611741444683672234UL;4319815233314161340UL;6338505257809472084UL;7079562779122952088UL;1425555313942491660UL;
            11732457201854548098UL;16659192675455660258UL;4625163344326626948UL;14365425020564515972UL;7923396323588240282UL;14003714631671619558UL;3973931139203065886UL;1226939725772574054UL;
            16573576071605566610UL;15966251362696382904UL;18210862833159108758UL;1671653095605261336UL;8871523210020380196UL;7665034417058761088UL;7873349992079541068UL;8069141792002954272UL;
            16644371083298261274UL;4153219780130355226UL;13159501946245857746UL;4234841917868207438UL;16456988767024439132UL;769721632228695900UL;17029164728979186056UL;9587239647395780446UL;
            5696695586663974828UL;5973573164245466284UL;2063961051660522344UL;15839727411994695414UL;199459669052927986UL;14946005510656560718UL;5533074920594268180UL;6116357638203448478UL;
            15159826749400631356UL;13744751880460335086UL;9026630115817166006UL;7852659349782449736UL;15748347900373409472UL;10303683974714885240UL;4934670569553498714UL;5376778982387108370UL;
            12015722847322421430UL;9842844136790033124UL;3894681422355049106UL;18250672835590363806UL;5806929370079168862UL;15352553644500412078UL;14654587642685911044UL;18042649453071963336UL;

            17946573602882554118UL;13962910691463550668UL;16603681017769630714UL;14141697429650567752UL;13670751367401967586UL;1916656545840761708UL;3927664540621357484UL;14293693855662677964UL;
            4714727513351594798UL;2451581932705223666UL;4381502341697200100UL;4368425723358635250UL;16984091860706930006UL;10506107317147062878UL;11955018622346451922UL;8382705398529510864UL;
            5267469662070717464UL;15301853718377696130UL;5222468855080464434UL;1358335983519133394UL;7051305686615951504UL;17616396652300564706UL;8134866340243791392UL;5814958151369686802UL;
            457785384807912768UL;8217216080001079036UL;5810600813959238594UL;15991251238118112550UL;5978035660977549408UL;13177562916699893330UL;2868137598350523944UL;8991218831506932804UL;
            5302773656371663436UL;99095853610299912UL;1788587076509008122UL;15112254392804371782UL;15295242803414544518UL;1684514525904896578UL;2470812776919717972UL;7393397109069194014UL;
            9286670733503693516UL;12864308131921283858UL;299574971472822716UL;7704229009114953650UL;14034285214502605382UL;15746713050279214390UL;15027030930736934586UL;15949364634273287416UL;
            16822520072905265460UL;14848813016659555092UL;14537935247989249588UL;5373799921628301034UL;15152638234304405174UL;10734514395627169250UL;13893775247432360360UL;12593229840062092124UL;
            17588233516394403022UL;451967259535062642UL;17787201662645497054UL;6494717919564680886UL;12284744786550852738UL;14556766516337798076UL;4508316373383323934UL;3696268089422111322UL;

            376856387213271802UL;15606748958390861436UL;5732467499142395644UL;9581842342894809158UL;536378430474277914UL;15225357924859506034UL;8069032853482777760UL;7384081406293592336UL;
            15225166930785196042UL;1814803006099418416UL;10923943020757249104UL;16016724822513309850UL;11851598054492819932UL;6694173686584917496UL;16294039626277543736UL;12523690005290728416UL;
            13754410116007817116UL;6587525011057060358UL;424818951823364514UL;3516274216476325514UL;16299747102147407044UL;386260018674172502UL;1181399325845063318UL;8175942810166613660UL;
            6444717557543992850UL;7257905226454997080UL;14737807439390237316UL;7836126903521609200UL;2869614908772334080UL;8748198205844139340UL;11145048314964365048UL;14715331818239684454UL;
            2175690806553480386UL;13011197415931344278UL;9751698169708401138UL;5743097684795304526UL;14407433447032538862UL;14113563889617871046UL;15735361926695798198UL;5962319320571728278UL;
            11337071994687828362UL;11418784404017101314UL;2203391709908825184UL;1843267239672419600UL;7076406494178840658UL;11416911575529081870UL;1937903514921520280UL;10021566705031748660UL;
            1293281435200205942UL;8739888437745858676UL;7678080003840364226UL;385807219277634006UL;1568351457825203838UL;6816571066377938896UL;4635963329449693942UL;5210167904902542444UL;
            7618592618489250390UL;1459725527312655116UL;7673205590265214388UL;9454976843229183074UL;4889830829399948388UL;12496991763280251212UL;2535557256724202966UL;11994251123662957068UL;

            9047374726642685298UL;9236970123329802762UL;16538397916652949686UL;9412423927210351996UL;17597353957404741724UL;16819058554428634608UL;1182306188088432788UL;16679378206943874156UL;
            11048997177922059402UL;14461917155561994690UL;8821188066289112540UL;2569542586880334858UL;13736757234172381344UL;13044945776504547232UL;7608552545217389344UL;16924925724737344722UL;
            13490273190041058056UL;13544483681849785854UL;13268030184260732328UL;8341577007587616552UL;11981385645784138840UL;12739813663858401146UL;15682750692183998074UL;13741999556868179034UL;
            7863061824753666954UL;10711848567370886900UL;1851928939872651412UL;173994800101321724UL;4955687640643085748UL;9096840850576520668UL;17009761012092243288UL;7108951253016709586UL;
            15432573436140201210UL;9061544758606553434UL;3304444937613904472UL;16685609420141789022UL;7277436274459389088UL;4182216630949380800UL;4900295465920426874UL;7443051037428928618UL;
            11273828603417989344UL;2352469712881399772UL;11673986160580734754UL;15690864393370035402UL;5478627578491943926UL;10897796410971510558UL;4704034473513099804UL;13234864866507084236UL;
            6134186279371533766UL;5206306754534358172UL;13007546367055059150UL;13167085736304116432UL;12275204124803464024UL;4716013566410744270UL;16677567026592534722UL;4171098949464447236UL;
            10802836935503779922UL;701866167495747064UL;3054889532304523998UL;17059421217919118712UL;10468886650443821178UL;13075717577531753708UL;16171956469496148926UL;7507204263148125046UL;

            535070851464515888UL;11011262178080311678UL;1056853323583859822UL;14513411946322362968UL;13722327066591950122UL;12712625604069112286UL;13223507269536054182UL;11844153752562103110UL;
            12390709658593153482UL;12204554713087954972UL;14349454703919723704UL;1612715212521958476UL;15757901246024590964UL;1716193147451670270UL;909852175890335094UL;15370917412142066098UL;
            1728933757882648298UL;8448628683348615796UL;12123255935135256628UL;16244465656445562864UL;795316636322912160UL;12063200268377639260UL;14915652542647832660UL;2915580400020274394UL;
            7078087096128525856UL;2747084540107334592UL;5924041513155809726UL;5740860192226924074UL;8493161838905553140UL;164118427865744620UL;639663497152624722UL;2451739645492093062UL;
            6870121342546334152UL;1986759699792393934UL;1697231316389591104UL;12839372130162943498UL;18051518219809926910UL;16863229931647879576UL;1870051230272811146UL;8378939526766460510UL;
            2576794903071643014UL;13072327487576715388UL;1526197592724647010UL;12015074863258546570UL;9107061268466920626UL;10772499169423062352UL;884252003474075916UL;3622759036444231710UL;
            7164634288339533838UL;9997171336275716664UL;14151337748627442430UL;11389069039320883556UL;4661903214707930728UL;3105956753327505464UL;6239063152221592958UL;5893564249273485776UL;
            5342486987090431266UL;5836543708096937226UL;1647527533801903614UL;2004799178205711340UL;17029458641467441136UL;1487219028898936132UL;17367531743422558152UL;14720464409431075348UL;

            1558077578039975344UL;13860830786044768784UL;10517244390486947730UL;17022065221998100252UL;10250628846810531174UL;787267214724421270UL;17282423542939038802UL;10923040188982833060UL;
            6711754163701036710UL;17968693316859942366UL;1952328545224446088UL;9261204598374683750UL;14304420986401391762UL;15420740490330437076UL;2448570425163893370UL;12683640306206648310UL;
            8330502810449932548UL;15814648749565247974UL;15915118991247025636UL;8122364383198329608UL;8330159730996266756UL;12363411138832883944UL;10413633595182886438UL;11179696256598581212UL;
            2237592972439708648UL;2255194386978233350UL;10839893033571845902UL;15890845364239956164UL;13408204945565476890UL;5753825721379036740UL;1939266150952902496UL;1479244964221623522UL;
            1346208858283752512UL;13679470843319856972UL;16440996502217024322UL;17156633379667530144UL;1191044343461553508UL;4449344272173312734UL;7582264404284676646UL;6261346191105489334UL;
            12196682178559230614UL;11901276765965488964UL;3291256350584031330UL;18012161963281745454UL;3778325114347582702UL;15703696660180311860UL;8529402902751379866UL;2160345441878788930UL;
            16442464919516802648UL;1825045828428699142UL;12469796883569673068UL;6221478891926613422UL;10268052443762121100UL;13217119802337340486UL;430524667900128926UL;10339101214570329592UL;
            17685628888905325398UL;2392228307787908902UL;3140581098169617940UL;4497969095045074068UL;6075935446294553584UL;3039220642247904180UL;7657406463893249544UL;15139342789550444248UL;

            865355807191259468UL;6279126667529299844UL;14383540414544334254UL;7864355081158328224UL;5328117748130550338UL;496808088723362266UL;9965408507556679224UL;3124745750444298358UL;
            7115899893391684798UL;5171369147873141418UL;4561894164142196798UL;5880574106513400518UL;8807526931934582038UL;18304895138076465394UL;14058555647262135616UL;10477443914198132626UL;
            11525605516087800140UL;15199201062077445936UL;3322608585540383280UL;1458066964785818986UL;6449518574670049000UL;12042490317506771720UL;9172651599754246990UL;12691276999830592106UL;
            13913342625004988374UL;10123952130947414598UL;7737824311586850344UL;1659215962546204404UL;15774776097797397116UL;13800303307694108790UL;1525288276994492676UL;15432307423560251896UL;
            12133271932643440672UL;13602399628926601836UL;13915390647036876360UL;12752208412494523924UL;14138578297288574142UL;10230582548493278560UL;16208109186136934426UL;11242965770532956578UL;
            17108761941570390008UL;10799878794521875348UL;8343579280620732208UL;17495903773051558162UL;15341670246306105332UL;15237163227516792352UL;13504056511348737166UL;574519821556648610UL;
            16250339875029676684UL;3193012847170915432UL;6061519854697965292UL;11628816252577707618UL;14987796622672231894UL;6457556980216639346UL;14586331542457865906UL;6115976552797342500UL;
            7654378081606602008UL;5359484951795705046UL;3195545882598988754UL;9231510513697031068UL;10293785431318356240UL;8599862975129558302UL;2241612777117998600UL;6627940788786378806UL;

            11248613652772964840UL;9867562046520357430UL;10762961564886105086UL;17912360135266294252UL;6137801022687168534UL;7450294350237636330UL;8673003316156722122UL;1551584234406051084UL;
            8879851239734444310UL;3298086420824746388UL;12290672110953044322UL;4377310946238480948UL;14124516079542267716UL;18429377446360330148UL;154925330222003822UL;3253324007385666938UL;
            3522617902310212192UL;3823763627277939174UL;13040344846727103428UL;9365370363932440862UL;2601093092202284894UL;12306598068256060004UL;6444051603838365636UL;13435721984002998476UL;
            11490927046042207184UL;10213411068904417604UL;16134197443524259318UL;3570629337421124066UL;10689627290620898206UL;18286683842429065230UL;15244151151964193454UL;5640097913579118294UL;
            9258384421522928408UL;2649882614677790050UL;9207855004198191824UL;10336055121312686000UL;9788236449784354374UL;230929291847714332UL;17082565069101918352UL;9523970584533592504UL;
            16810027511544030078UL;4471254318550087450UL;3780261039075246620UL;7017687316345435632UL;16067344076312222392UL;12460256599674315226UL;346174256802339310UL;8184517372502489226UL;
            11815712727279033294UL;14164477658675063572UL;3286619963997639364UL;15137681719951228660UL;5551080661963290624UL;13193019507992621266UL;5661196312708540864UL;3812203635369484026UL;
            14586928056061963040UL;11572057666775746064UL;12261080388853408614UL;11530480955062890738UL;5905715184619594950UL;2108558540771919448UL;1876310604511111936UL;570757121617527854UL;

            12574549755802785100UL;16443082542517785584UL;13660257824871647756UL;10375864877109868060UL;1283349257239643672UL;10480357514724298848UL;2102062019674942696UL;989790992628661580UL;
            14939652393423059292UL;231455403060740746UL;15392985165526237332UL;5893899204362377590UL;15008487300607378992UL;11377605300049401144UL;5493943625605771438UL;15084802208311748772UL;
            13081355929189939042UL;7691848474250524724UL;11623911448789886910UL;13148064604868513030UL;13163162833643235934UL;11059634676581784930UL;10285715861788859010UL;1125679358816511802UL;
            866560257097973228UL;16327211911960170402UL;753015219923774866UL;16020360496210947446UL;17559545064826196778UL;17632211976902572378UL;6001120892410884796UL;13021499343000033068UL;
            14651886035150488788UL;17043919162345589338UL;9418378763215436714UL;11515131931290159184UL;12041514478951658432UL;604370375018902232UL;10433813284759390520UL;11386371170357585286UL;
            13804241403229057346UL;6029395824271849256UL;12328732560774604488UL;8657823677826162866UL;5082818429977555956UL;13788688739026655074UL;15389883126715731282UL;13188842905087081942UL;
            6004212527046359542UL;151682343326847282UL;13121484094528126202UL;9026882584342862000UL;10907593889918158360UL;7824692746031570184UL;9231422046861836774UL;13514074272773039012UL;
            3100982014055121238UL;14757592218523752370UL;9998502826155052952UL;10867335607806085638UL;236251896405141026UL;4633802842890611318UL;12290216048587548728UL;6343997214846151486UL;

            3591490871264005846UL;11477029166294441118UL;17207443962968935894UL;455488295483641806UL;4330807740248377940UL;6552962174459494146UL;8378431705090728210UL;14164578135339702830UL;
            10465581913979867856UL;7923717876592009806UL;4111855899994986858UL;8853560567149517396UL;16585393081409031800UL;1554706319225285626UL;8114008830732912492UL;3371940990714217908UL;
            2521660644058944506UL;2948542054564828660UL;14153534865037268920UL;13194226332749162618UL;16671450371134523938UL;6771401495000981258UL;8408199538811145490UL;13624210701813922222UL;
            15107869283949129708UL;10537348939668604012UL;112940723069126890UL;15819144237224908626UL;2892066878009356948UL;6893057789012355990UL;14974156480460794972UL;2664014192529203210UL;
            5340980247011934632UL;17509454861226944078UL;11940453918049674332UL;18220748372254471362UL;16824233280937172050UL;610012363404793194UL;12515668202642270334UL;1659308426616672788UL;
            7079568573131857870UL;17463207697321781860UL;10673273525780713024UL;4208978758881610544UL;8283083076309309622UL;2755991034385475388UL;13199066122313278856UL;15647147990663949628UL;
            2032444034691397282UL;531489711211049572UL;3938448369147987384UL;13444972959689344786UL;6257518099028975776UL;2796815787615533756UL;13700228577489310564UL;3160185983542576612UL;
            2200040045247455020UL;15327288303752387800UL;10495710256153793502UL;16273505662658112490UL;14721398773463347032UL;5206466328696068152UL;11485607232664799858UL;10023668604770321902UL
        |]
    let fs = [|"a";"b";"c";"d";"e";"f";"g";"h"|]
    let rs = [|"1";"2";"3";"4";"5";"6";"7";"8"|]
    let frs = 
        let r i = i/8
        let f i =i%8
        [|for i in 0..63 -> fs.[f i] + rs.[r i] |]
    let MATRIX_WIDTH = 8
    let SQUARE_COUNT = 64
    let f = 
        let FileName(sq) =
            let FileNames = [|"a"; "b"; "c"; "d"; "e"; "f"; "g"; "h"|]
            FileNames.[sq % MATRIX_WIDTH]
        [|for i in 0..SQUARE_COUNT-1 -> FileName(i) |]
    let r = 
        let RankName(sq) =
            let RankNames = [|"1"; "2"; "3"; "4"; "5"; "6"; "7"; "8"|]
            RankNames.[sq / MATRIX_WIDTH]
        [|for i in 0..SQUARE_COUNT-1 -> RankName(i) |]
    let sq = Array.map2 (+) f r
    let fi = 
        let FileName(sq) =
            let FileNames = [|0;1;2;3;4;5;6;7|]
            FileNames.[sq % MATRIX_WIDTH]
        [|for i in 0..SQUARE_COUNT-1 -> FileName(i) |]
    let ri = 
        let RankName(sq) =
            let RankNames = [|0;1;2;3;4;5;6;7|]
            RankNames.[sq / MATRIX_WIDTH]
        [|for i in 0..SQUARE_COUNT-1 -> RankName(i) |]
    let FileFromName(fileName) =
        match fileName with
            |"a" -> 0
            |"b" -> 1
            |"c" -> 2
            |"d" -> 3
            |"e" -> 4
            |"f" -> 5
            |"g" -> 6
            |"h" -> 7
            |_ -> -1
    let GetOrdFR (file,rank) = (rank <<< 3) ||| file
    //Do all possible moves for each piece from each square
    let raysB =
        let ans = Array.create SQUARE_COUNT []
        let rec upl i l =
            if f.[i] = "a" || r.[i] = "8" then
                List.rev l
            else
                upl (i+7) (i+7::l)
        let rec upr i l =
            if f.[i] = "h" || r.[i] = "8" then
                List.rev l
            else
                upr (i+9) (i+9::l)
        let rec dwl i l =
            if f.[i] = "a" || r.[i] = "1" then
                List.rev l
            else
                dwl (i-9) (i-9::l)
        let rec dwr i l =
            if f.[i] = "h" || r.[i] = "1" then
                List.rev l
            else
                dwr (i-7) (i-7::l)
        for i = 0 to SQUARE_COUNT-1 do
            let uplr = upl i []
            let uprr = upr i []
            let dwlr = dwl i []
            let dwrr = dwr i []
            let rays = uplr::uprr::dwlr::dwrr::[]
            ans.[i] <- rays
        ans    
    let raysR =
        let ans = Array.create SQUARE_COUNT []
        let rec up i l =
            if r.[i] = "8" then
                List.rev l
            else
                up (i+8) (i+8::l)
        let rec lef i l =
            if f.[i] = "a" then
                List.rev l
            else
                lef (i-1) (i-1::l)
        let rec rgt i l =
            if f.[i] = "h" then
                List.rev l
            else
                rgt (i+1) (i+1::l)
        let rec dwn i l =
            if r.[i] = "1" then
                List.rev l
            else
                dwn (i-8) (i-8::l)
        for i = 0 to SQUARE_COUNT-1 do
            let upr = up i []
            let lefr = lef i []
            let rgtr = rgt i []
            let dwnr = dwn i []
            let rays = upr::lefr::rgtr::dwnr::[]
            ans.[i] <- rays
        ans    
    let raysQ = [|for i in {0..SQUARE_COUNT-1} -> raysB.[i]@raysR.[i]|]
    //Rook cells for pawns on file
    let fileRaysR =
        let ans = Array.create SQUARE_COUNT []
        let rec fileR i l =
            if r.[i] = "7" then
                List.rev l
            else
                fileR (i+8) (i+8::l)
        let start i = 
            match f.[i] with
                |"a" -> 0
                |"b" -> 1
                |"c" -> 2
                |"d" -> 3
                |"e" -> 4
                |"f" -> 5
                |"g" -> 6
                |"h" -> 7
                |_ -> -1
        for i = 0 to SQUARE_COUNT-1 do
            ans.[i] <- fileR (start i) []
        ans    
    let movsN =
        let ans = Array.create SQUARE_COUNT []
        let u2l i l = if r.[i] = "8"||r.[i] = "7"||f.[i] = "a" then l else i+15::l
        let l2u i l = if r.[i] = "8"||f.[i] = "a"||f.[i] = "b" then l else i+6::l
        let u2r i l = if r.[i] = "8"||r.[i] = "7"||f.[i] = "h" then l else i+17::l
        let r2u i l = if r.[i] = "8"||f.[i] = "g"||f.[i] = "h" then l else i+10::l
        let d2l i l = if r.[i] = "1"||r.[i] = "2"||f.[i] = "a" then l else i-17::l
        let l2d i l = if r.[i] = "1"||f.[i] = "a"||f.[i] = "b" then l else i-10::l
        let d2r i l = if r.[i] = "1"||r.[i] = "2"||f.[i] = "h" then l else i-15::l
        let r2d i l = if r.[i] = "1"||f.[i] = "g"||f.[i] = "h" then l else i-6::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = u2l i []
            let movs = l2u i movs
            let movs = u2r i movs
            let movs = r2u i movs
            let movs = d2l i movs
            let movs = l2d i movs
            let movs = d2r i movs
            let movs = r2d i movs
            ans.[i] <- movs
        ans    
    let movsK =
        let ans = Array.create SQUARE_COUNT []
        let u i l = if r.[i] = "8" then l else i+8::l
        let ul i l = if r.[i] = "8"||f.[i] = "a" then l else i+7::l
        let ur i l = if r.[i] = "8"||f.[i] = "h" then l else i+9::l
        let rt i l = if f.[i] = "h" then l else i+1::l
        let lf i l = if f.[i] = "a" then l else i-1::l
        let d i l = if r.[i] = "1" then l else i-8::l
        let dr i l = if r.[i] = "1"||f.[i] = "h" then l else i-7::l
        let dl i l = if r.[i] = "1"||f.[i] = "a" then l else i-9::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = u i []
            let movs = ul i movs
            let movs = ur i movs
            let movs = rt i movs
            let movs = lf i movs
            let movs = d i movs
            let movs = dr i movs
            let movs = dl i movs
            ans.[i] <- movs
        ans    
    //Pawn related moves
    let attsPW =
        let ans = Array.create SQUARE_COUNT []
        let ar i l = if r.[i] = "8"||r.[i] = "1"||f.[i] = "h" then l else i+9::l
        let al i l = if r.[i] = "8"||r.[i] = "1"||f.[i] = "a" then l else i+7::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            ans.[i] <- movs
        ans    
    let attsPB =
        let ans = Array.create SQUARE_COUNT []
        let ar i l = if r.[i] = "8"||r.[i] = "1"||f.[i] = "h" then l else i-7::l
        let al i l = if r.[i] = "8"||r.[i] = "1"||f.[i] = "a" then l else i-9::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            ans.[i] <- movs
        ans    
    let attsPWto =
        let ans = Array.create SQUARE_COUNT []
        let al i l = if r.[i] = "2"||r.[i] = "1"||f.[i] = "h" then l else i-7::l
        let ar i l = if r.[i] = "2"||r.[i] = "1"||f.[i] = "a" then l else i-9::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            ans.[i] <- movs
        ans    
    let attsPBto =
        let ans = Array.create SQUARE_COUNT []
        let al i l = if r.[i] = "8"||r.[i] = "7"||f.[i] = "h" then l else i+9::l
        let ar i l = if r.[i] = "8"||r.[i] = "7"||f.[i] = "a" then l else i+7::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            ans.[i] <- movs
        ans    
    let movsPWto =
        let ans = Array.create SQUARE_COUNT []
        let am i l = if r.[i] = "2"||r.[i] = "1" then l else i-8::l
        let a2 i l = if r.[i] <> "4" then l else i-16::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = am i []
            let movs = a2 i movs
            ans.[i] <- movs
        ans    
    let movsPBto =
        let ans = Array.create SQUARE_COUNT []
        let am i l = if r.[i] = "8"||r.[i] = "8" then l else i+8::l
        let a2 i l = if r.[i] <> "5" then l else i+16::l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = am i []
            let movs = a2 i movs
            ans.[i] <- movs
        ans    
    let promPW =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] = "7" then ans.[i] <- true
        ans    
    let promPB =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] = "2" then ans.[i] <- true
        ans    
    let movPW =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "1" && r.[i] <> "8" then ans.[i] <- i+8
        ans    
    let movPB =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "1" && r.[i] <> "8" then ans.[i] <- i-8
        ans    
    let movPW2 =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] = "2" then ans.[i] <- i+16
        ans    
    let movPB2 =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] = "7" then ans.[i] <- i-16
        ans    
    let epPWl =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] = "5" then ans.[i] <- true
        ans    
    let epPBl =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] = "4" then ans.[i] <- true
        ans    
    let epPWr =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] = "5" then ans.[i] <- true
        ans    
    let epPBr =
        let ans = Array.create SQUARE_COUNT false
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] = "4" then ans.[i] <- true
        ans    
    let epPlpc =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && (r.[i] = "5"||r.[i] = "4") then ans.[i] <- i-1
        ans    
    let epPrpc =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && (r.[i] = "5"||r.[i] = "4") then ans.[i] <- i+1
        ans    
    let epPWlto =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] = "5" then ans.[i] <- i+7
        ans    
    let epPBlto =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] = "4" then ans.[i] <- i-9
        ans    
    let epPWrto =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] = "5" then ans.[i] <- i+9
        ans    
    let epPBrto =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] = "4" then ans.[i] <- i-7
        ans    
//friendly pawns
    let frRaysWP =
        let ans = Array.create SQUARE_COUNT []
        let rec up i l =
            if r.[i] = "7" then
                List.rev l
            else
                up (i+8) (i+8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "7" && r.[i] <> "8" then
                let upr = up i []
                ans.[i] <- upr
        ans    
    let frRaysBP =
        let ans = Array.create SQUARE_COUNT []
        let rec dw i l =
            if r.[i] = "2" then
                List.rev l
            else
                dw (i-8) (i-8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "2" && r.[i] <> "1" then
                let dwr = dw i []
                ans.[i] <- dwr
        ans    
    let frRaysWPl =
        let ans = Array.create SQUARE_COUNT []
        let rec up i l =
            if r.[i] = "7" then
                List.rev l
            else
                up (i+8) (i+8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] <> "7" && r.[i] <> "8" then
                let upr = up (i-1) []
                ans.[i] <- upr
        ans    
    let frRaysBPl =
        let ans = Array.create SQUARE_COUNT []
        let rec dw i l =
            if r.[i] = "2" then
                List.rev l
            else
                dw (i-8) (i-8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "a" && r.[i] <> "2" && r.[i] <> "1" then
                let dwr = dw (i-1) []
                ans.[i] <- dwr
        ans    
    let frRaysWPr =
        let ans = Array.create SQUARE_COUNT []
        let rec up i l =
            if r.[i] = "7" then
                List.rev l
            else
                up (i+8) (i+8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] <> "7" && r.[i] <> "8" then
                let upr = up (i+1) []
                ans.[i] <- upr
        ans    
    let frRaysBPr =
        let ans = Array.create SQUARE_COUNT []
        let rec dw i l =
            if r.[i] = "2" then
                List.rev l
            else
                dw (i-8) (i-8::l)
        for i = 0 to SQUARE_COUNT-1 do
            if f.[i] <> "h" && r.[i] <> "2" && r.[i] <> "1" then
                let dwr = dw (i+1) []
                ans.[i] <- dwr
        ans    
    //can be attacked
    let canattPWto =
        let ans = Array.create SQUARE_COUNT []
        let al i l = if r.[i] = "8"||r.[i] = "7"||r.[i] = "6"||f.[i] = "h" then l else i+9+8::l
        let ar i l = if r.[i] = "8"||r.[i] = "7"||r.[i] = "6"||f.[i] = "a" then l else i+7+8::l
        let al2 i l = if r.[i] = "4" && f.[i] <> "h" then i+9+8+8::l else l
        let ar2 i l = if r.[i] = "4" && f.[i] <> "a" then i+7+8+8::l else l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            let movs = ar2 i movs
            let movs = al2 i movs
            ans.[i] <- movs
        ans    
    let canattPBto =
        let ans = Array.create SQUARE_COUNT []
        let al i l = if r.[i] = "1"||r.[i] = "2"||r.[i] = "3"||f.[i] = "h" then l else i-7-8::l
        let ar i l = if r.[i] = "1"||r.[i] = "2"||r.[i] = "3"||f.[i] = "a" then l else i-9-8::l
        let al2 i l = if r.[i] = "5" && f.[i] <> "h" then i-7-8-8::l else l
        let ar2 i l = if r.[i] = "5" && f.[i] <> "a" then i-9-8-8::l else l
        for i = 0 to SQUARE_COUNT-1 do
            let movs = ar i []
            let movs = al i movs
            let movs = ar2 i movs
            let movs = al2 i movs
            ans.[i] <- movs
        ans    
//king open rays
    let OpenWK =
        let ans = Array.create SQUARE_COUNT []
        let rec upl i l =
            if f.[i] = "a" || r.[i] = "8" || List.length l = 4 then
                List.rev l
            else
                upl (i+7) (i+7::l)
        let rec upr i l =
            if f.[i] = "h" || r.[i] = "8" || List.length l = 4 then
                List.rev l
            else
                upr (i+9) (i+9::l)
        let rec upi i l =
            if r.[i] = "8" || List.length l = 4 then
                List.rev l
            else
                upi (i+8) (i+8::l)
        for i = 0 to SQUARE_COUNT-1 do
            let uplr = upl i []
            let uprr = upr i []
            let upir = upi i []
            let rays = uplr::upir::uprr::[]
            ans.[i] <- rays
        ans    
    let OpenBK =
        let ans = Array.create SQUARE_COUNT []
        let rec dwl i l =
            if f.[i] = "a" || r.[i] = "1" || List.length l = 4 then
                List.rev l
            else
                dwl (i-9) (i-9::l)
        let rec dwr i l =
            if f.[i] = "h" || r.[i] = "1" || List.length l = 4 then
                List.rev l
            else
                dwr (i-7) (i-7::l)
        let rec dwi i l =
            if r.[i] = "1" || List.length l = 4 then
                List.rev l
            else
                dwi (i-8) (i-8::l)
        for i = 0 to SQUARE_COUNT-1 do
            let dwlr = dwl i []
            let dwrr = dwr i []
            let dwir = dwi i []
            let rays = dwlr::dwir::dwrr::[]
            ans.[i] <- rays
        ans    
//king pawns in front
    let pawnOneWK =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "8" then
                ans.[i] <- i+8
        ans    
    let pawnOneBK =
        let ans = Array.create SQUARE_COUNT -1
        for i = 0 to SQUARE_COUNT-1 do
            if r.[i] <> "1" then
                ans.[i] <- i-8
        ans    
    //store base value of 50 move count when load game
    let mutable FiftyMoveDrawBase = 0
